gpt4 book ai didi

javascript - Angular 日历逻辑问题(+Plunker 帮助)

转载 作者:行者123 更新时间:2023-12-03 06:43:28 25 4
gpt4 key购买 nike

我一直在尝试获得有关日历逻辑的帮助,因此一次只能从表格中选择一个单元格,但这里的 Plunker: http://plnkr.co/edit/F0MIoZIQ3pkhuDgcH2wo?p=info似乎不起作用。非常感谢您的建议 - 我已经在这个问题上坚持太久了!

JS:

var app = angular.module('bookerApp', []);

app.controller('BookerController', ['$scope', function($scope){

$scope.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

$scope.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

$scope.rows = [
[ 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, '', '', '', ''],
['', '', '', '', '', '', '']
];

$scope.currDate = new Date();
$scope.daysInMonth = 0;
$scope.currDay = 0;
$scope.monthStart = 0;
$scope.monthEnd = 0;
$scope.dayStart = 0;
$scope.dif = 0;
$scope.times = [];
$scope.timeDate = new Date(1970, 1, 1, 0, 0, 0, 0);

$scope.test;
$scope.isChanged = [];
$scope.lastChanged = '';
$scope.isAnyActive = false;
$scope.rowsArray = [''];

$scope.idCount = 0;
$scope.idNum = [[0,0],[0,0]];


for (x=0; x<$scope.rows.length; x++){
$scope.idNum[x] = [];
for (y=0; y<$scope.rows[x].length; y++) {
$scope.idNum[x][y] = $scope.idCount;
$scope.isChanged[$scope.idCount] = false;
$scope.idCount += 1;

}
}

$scope.checkIs = function (id) {

if ($scope.isChanged[id] == false && $scope.isAnyActive == false) {
$scope.isChanged[id] = true;
$scope.isAnyActive = true;
$scope.lastChanged = id;
}
else if ($scope.isChanged[id] == true && $scope.isAnyActive == true){
$scope.isChanged[id] = false;
$scope.isAnyActive = false;
$scope.lastChanged = '';
}
else if ($scope.isChanged[id] == false && $scope.isAnyActive == true) {
$scope.isChanged[id] = true;
$scope.isChanged[lastChanged] = false;
}


}

$scope.calLayout = function(){

for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
if ($scope.rows[x][y] == 1) {
$scope.dif = y - $scope.monthStart.getDay();

}
}
}



for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
$scope.rows[x][y] += $scope.dif;
}
}


for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
if ($scope.rows[x][y] <= 0){
$scope.rows[x][y] = '';
}
}
}

for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
if (($scope.rows[x][y] - $scope.dif) == $scope.daysInMonth){
for (i = -($scope.dif); i > 0; i--){
if (y+i > 6) {
$scope.rows[x+1][y-7+i] = ($scope.rows[x][y]+i);
}
else {
$scope.rows[x][y+i] = ($scope.rows[x][y]+i);
}
}
}


}
}
$scope.idCount2 = 0;
for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
$scope.rowsArray[$scope.idCount2] = $scope.rows[x][y];
$scope.idCount2 += 1;
}
}
}


$scope.getDaysInMonth = function () {
monthStart = new Date($scope.currDate.getFullYear(), $scope.currDate.getMonth(), 1);
monthEnd = new Date ($scope.currDate.getFullYear(), $scope.currDate.getMonth()+1, 1);
$scope.monthStart = monthStart;
$scope.monthEnd = monthEnd;
$scope.daysInMonth = (monthEnd - monthStart)/(1000*60*60*24);
$scope.calLayout();
}

$scope.getMonthStartDay = function (){
$scope.currDay = $scope.currDate.getDate();
return $scope.monthStart.getDay();
}

$scope.setActive = function(num) {
$scope.activated = num;
}

$scope.isActive = function(num) {
/*Insert if statement to disallow empty cells from being selected*/;
return $scope.activated === num;
}

$scope.nextMonth = function (){
$scope.resetRows();
$scope.currDate = new Date ($scope.currDate.getFullYear(), $scope.currDate.getMonth()+1, $scope.currDate.getDate());
$scope.getDaysInMonth();
$scope.getTimeList();
}

$scope.lastMonth = function (){
$scope.resetRows();
$scope.currDate = new Date ($scope.currDate.getFullYear(), $scope.currDate.getMonth()-1, $scope.currDate.getDate());
$scope.getDaysInMonth();
}

$scope.isThisMonth = function (){
var now = new Date;
if ($scope.currDate.getMonth() == now.getMonth() && $scope.currDate.getFullYear() == now.getFullYear()){
return false;
}
else {
return true;
}
}



$scope.rowIsNotEmpty = function () {

for (x=0; x<$scope.rows.length; x++) {

var rowCount = 0;

for (y=0; y<$scope.rows.length; y++) {
if ($scope.rows[x][y] == '') {
rowCount += 1;
}
}

if (rowCount == rows[x].length){
return false;
}

}
}

$scope.resetRows = function (){

$scope.rows = [
[ 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, '', '', '', ''],
['', '', '', '', '', '', '']
];

}

$scope.getTimeList = function() {


for (i=0; i < 48; i++) {
$scope.times[i] = ($scope.timeDate.getTime())/(60*1000);
$scope.timeDate += (30* 60* 1000);

}
}


}]);

HTML:

<!doctype html>
<html ng-app='bookerApp'>
<head>
<link rel='stylesheet' href='css/bootstrap.min.css'>
<link rel='stylesheet' href='css/styles.css'>
<script src='js/angular.min.js'></script>
<script src='js/controllers/BookerController.js'></script>
</head>
<body ng-controller='BookerController' ng-init='getDaysInMonth()'>
<div class='cal-top'>
{{months[currDate.getMonth()]}}<br>
{{currDate.getFullYear()}}
</div>
<table >
<tr class='booker-head'>
<th ng-repeat='day in days'>{{day}}</th>
</tr>
<tr ng-repeat='row in rows' ng-hide='rowIsNotEmpty()'>
<td
ng-repeat='num in row track by $index' id='{{idNum[$parent.$index][$index]}}'
ng-click='checkIs(idNum[$parent.$index][$index])' ng-class='{active: isChanged[idNum[$parent.$index][$index]] && num}'
ng-hide='$parent.$index != 0 && !num'>{{num}}
</td>
</tr>
</table>

<button type='button' ng-click='lastMonth()' ng-show='isThisMonth()'><!--ShowIf-->Last Month</button>
<button type='button' ng-click='nextMonth()'>Next Month</button>


</body>
</html>

<pre>
id: {{idNum}}
isChanged: {{isChanged}}
isAnyActive: {{isAnyActive}}
rows: {{rows}}
rowsArray: {{rowsArray}}
lastChanged: {{lastChanged}}

</pre>

CSS:

table {
margin: 0 auto;
}

th {
background-color: rgb(51,102,154);
color: white;
text-align: center;
}

tr, td {
text-align: center;
border: 1px solid black;
width: 100px;
height: 70px;
}

td:hover {
background-color: rgb(51, 102, 154);
color: white;
}

.active {
background-color: black;
color: white;
}

.cal-top {
background-color: rgb(51, 102, 154);
margin: 20px auto 0;
width: 701px;
text-align: center;
font-size: 4em;
color: white;
font-weight: 700;
border: solid 1px black;
border-bottom: none;
}

最佳答案

您好,请检查我在点击中添加的一次条件,因此现在只能选择一个日期

for (x=0; x<$scope.isChanged.length; x++){
if(x == id)
{
$scope.isChanged[x] = true;
$scope.isChanged[x] = true;
}
else
{
$scope.isChanged[x] = false;
$scope.isChanged[x] = false;
}

}

HTML

<!DOCTYPE html>
<html ng-app="plunker">

<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link rel="stylesheet" href="style.css" />
<script data-require="angular.js@1.0.x" src="https://code.angularjs.org/1.0.8/angular.js" data-semver="1.0.8"></script>
<script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
<div class='cal-top'>
{{months[currDate.getMonth()]}}<br>
{{currDate.getFullYear()}}
</div>
<table >
<tr class='booker-head'>
<th ng-repeat='day in days'>{{day}}</th>
</tr>
<tr ng-repeat='row in rows' >
<td
ng-repeat='num in row ' id='{{idNum[$parent.$index][$index]}}'
ng-click='checkIs(idNum[$parent.$index][$index])' ng-class='{active: isChanged[idNum[$parent.$index][$index]] && num}'
ng-hide='$parent.$index != 0 && !num'>{{num}}
</td>
</tr>
</table>

<button type='button' ng-click='lastMonth()' ng-show='isThisMonth()'><!--ShowIf-->Last Month</button>
<button type='button' ng-click='nextMonth()'>Next Month</button>


<pre>
id: {{idNum}}
isChanged: {{isChanged}}
isAnyActive: {{isAnyActive}}
rows: {{rows}}
rowsArray: {{rowsArray}}
lastChanged: {{lastChanged}}
</pre>
</body>

</html>

和JS

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
$scope.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

$scope.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

$scope.rows = [
[ 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, '', '', '', ''],
['', '', '', '', '', '', '']
];

$scope.currDate = new Date();
$scope.daysInMonth = 0;
$scope.currDay = 0;
$scope.monthStart = 0;
$scope.monthEnd = 0;
$scope.dayStart = 0;
$scope.dif = 0;
$scope.times = [];
$scope.timeDate = new Date(1970, 1, 1, 0, 0, 0, 0);

$scope.test;
$scope.isChanged = [];
$scope.lastChanged = '';
$scope.isAnyActive = false;
$scope.rowsArray = [''];

$scope.idCount = 0;
$scope.idNum = [[0,0],[0,0]];


for (x=0; x<$scope.rows.length; x++){
$scope.idNum[x] = [];
for (y=0; y<$scope.rows[x].length; y++) {
$scope.idNum[x][y] = $scope.idCount;
$scope.isChanged[$scope.idCount] = false;
$scope.idCount += 1;

}
}

$scope.checkIs = function (id) {

if ($scope.isChanged[id] == false && $scope.isAnyActive == false) {
$scope.isChanged[id] = true;
$scope.isAnyActive = true;
}
else if ($scope.isChanged[id] == true && $scope.isAnyActive == true){
$scope.isChanged[id] = false;
$scope.isAnyActive = false;
}
else if ($scope.isChanged[id] == false && $scope.isAnyActive == true) {
$scope.isChanged[id] = true;
}
else
{
$scope.isChanged = false;
}
for (x=0; x<$scope.isChanged.length; x++){
if(x == id)
{
$scope.isChanged[x] = true;
$scope.isChanged[x] = true;
}
else
{
$scope.isChanged[x] = false;
$scope.isChanged[x] = false;
}

}


}

$scope.calLayout = function(){

for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
if ($scope.rows[x][y] == 1) {
$scope.dif = y - $scope.monthStart.getDay();

}
}
}



for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
$scope.rows[x][y] += $scope.dif;
}
}


for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
if ($scope.rows[x][y] <= 0){
$scope.rows[x][y] = '';
}
}
}

for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
if (($scope.rows[x][y] - $scope.dif) == $scope.daysInMonth){
for (i = -($scope.dif); i > 0; i--){
if (y+i > 6) {
$scope.rows[x+1][y-7+i] = ($scope.rows[x][y]+i);
}
else {
$scope.rows[x][y+i] = ($scope.rows[x][y]+i);
}
}
}


}
}
$scope.idCount2 = 0;
for (x=0; x<$scope.rows.length; x++){
for(y=0; y<$scope.rows[x].length; y++){
$scope.rowsArray[$scope.idCount2] = $scope.rows[x][y];
$scope.idCount2 += 1;
}
}
}


$scope.getDaysInMonth = function () {
monthStart = new Date($scope.currDate.getFullYear(), $scope.currDate.getMonth(), 1);
monthEnd = new Date ($scope.currDate.getFullYear(), $scope.currDate.getMonth()+1, 1);
$scope.monthStart = monthStart;
$scope.monthEnd = monthEnd;
$scope.daysInMonth = (monthEnd - monthStart)/(1000*60*60*24);
$scope.calLayout();
}

$scope.getMonthStartDay = function (){
$scope.currDay = $scope.currDate.getDate();
return $scope.monthStart.getDay();
}

$scope.setActive = function(num) {
$scope.activated = num;
}

$scope.isActive = function(num) {
/*Insert if statement to disallow empty cells from being selected*/;
return $scope.activated === num;
}

$scope.nextMonth = function (){
$scope.resetRows();
$scope.currDate = new Date ($scope.currDate.getFullYear(), $scope.currDate.getMonth()+1, $scope.currDate.getDate());
$scope.getDaysInMonth();
$scope.getTimeList();
}

$scope.lastMonth = function (){
$scope.resetRows();
$scope.currDate = new Date ($scope.currDate.getFullYear(), $scope.currDate.getMonth()-1, $scope.currDate.getDate());
$scope.getDaysInMonth();
}

$scope.isThisMonth = function (){
var now = new Date;
if ($scope.currDate.getMonth() == now.getMonth() && $scope.currDate.getFullYear() == now.getFullYear()){
return false;
}
else {
return true;
}
}



$scope.rowIsNotEmpty = function () {

for (x=0; x<$scope.rows.length; x++) {

var rowCount = 0;

for (y=0; y<$scope.rows.length; y++) {
if ($scope.rows[x][y] == '') {
rowCount += 1;
}
}

if (rowCount == rows[x].length){
return false;
}

}
}

$scope.resetRows = function (){

$scope.rows = [
[ 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, '', '', '', ''],
['', '', '', '', '', '', '']
];

}
});

和CSS

/* 把你的 CSS 放在这里 */

table {
margin: 0 auto;
}

th {
background-color: rgb(51,102,154);
color: white;
text-align: center;
}

tr, td {
text-align: center;
border: 1px solid black;
width: 100px;
height: 70px;
}

td:hover {
background-color: rgb(51, 102, 154);
color: white;
}

.active {
background-color: black;
color: white;
}

.cal-top {
background-color: rgb(51, 102, 154);
margin: 20px auto 0;
width: 701px;
text-align: center;
font-size: 4em;
color: white;
font-weight: 700;
border: solid 1px black;
border-bottom: none;
}

供引用https://plnkr.co/edit/zGuDSuqdRiYsWB2ZKlgO?p=preview

关于javascript - Angular 日历逻辑问题(+Plunker 帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com