Jquery 相对于该高度/宽度移动。它需要一个SelectDates(date1,date2)函数来处理您想要对所选日期范围执行的任何操作
这是我的密码:Jquery 相对于该高度/宽度移动。它需要一个SelectDates(date1,date2)函数来处理您想要对所选日期范围执行的任何操作,jquery,jquery-plugins,jquery-mobile,jquery-selectors,fullcalendar,Jquery,Jquery Plugins,Jquery Mobile,Jquery Selectors,Fullcalendar,这是我的密码: $(document).on('touchmove', '.fc-day', function (e) { var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; var $startElement = $(this); var moveStartDate = new Date($startEl
$(document).on('touchmove', '.fc-day', function (e) {
var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
var $startElement = $(this);
var moveStartDate = new Date($startElement.data('date'));
var timezoneOffset = moveStartDate.getTimezoneOffset() * 60000;
moveStartDate.setTime(moveStartDate.getTime() + timezoneOffset);
var rect = $startElement[0].getBoundingClientRect();
var DayHeight = $startElement[0].clientHeight;
var DayWidth = $startElement[0].clientWidth;
var xdif = 0;
if (touch.pageX < rect.left) {
xdif = touch.pageX - rect.left;
}
if (touch.pageX > rect.right) {
xdif = touch.pageX - rect.right;
}
var xDaysAwayDecimal = xdif == 0 ? 0 : (xdif / DayWidth);
var xDaysAway = xdif >= 0 ? Math.ceil(xDaysAwayDecimal) : Math.floor(xDaysAwayDecimal);
var ydif = 0;
if (touch.pageY < rect.top) {
ydif = touch.pageY - rect.top;
}
if (touch.pageY > rect.bottom) {
ydif = touch.pageY - rect.bottom;
}
var yDaysAwayDecimal = ydif == 0 ? 0 : (ydif / DayHeight);
var yDaysAway = ydif >= 0 ? Math.ceil(yDaysAwayDecimal) : Math.floor(yDaysAwayDecimal);
var dayModifier = (yDaysAway * 7) + xDaysAway;
var moveEndDate = new Date(moveStartDate);
moveEndDate.setDate(moveEndDate.getDate() + dayModifier);
if (moveStartDate > moveEndDate) {
SelectDates(moveEndDate, moveStartDate);
}
else {
SelectDates(moveStartDate, moveEndDate);
}
})
$(document).on('touchmove','.fc day',函数(e){
var touch=e.originalEvent.touch[0]| | e.originalEvent.changedtouchs[0];
var$startElement=$(本);
var moveStartDate=新日期($startElement.data('Date');
var timezoneOffset=moveStartDate.getTimezoneOffset()*60000;
moveStartDate.setTime(moveStartDate.getTime()+时区偏移);
var rect=$startElement[0]。getBoundingClientRect();
var DayHeight=$startElement[0].clientHeight;
var DayWidth=$startElement[0].clientWidth;
var xdif=0;
如果(touch.pageXrect.right){
xdif=touch.pageX-rect.right;
}
变量xDaysAwayDecimal=xdif==0?0:(xdif/DayWidth);
var xDaysAway=xdif>=0?Math.ceil(xDaysAwayDecimal):Math.floor(xDaysAwayDecimal);
var-ydif=0;
如果(touch.pageYrect.bottom){
ydif=touch.pageY-rect.bottom;
}
变量yDaysAwayDecimal=ydif==0?0:(ydif/日高);
var yDaysAway=ydif>=0?Math.ceil(yDaysAwayDecimal):Math.floor(yDaysAwayDecimal);
var dayModifier=(yDaysAway*7)+xDaysAway;
var moveEndDate=新日期(moveStartDate);
moveEndDate.setDate(moveEndDate.getDate()+dayModifier);
如果(moveStartDate>moveEndDate){
选择日期(moveEndDate、moveStartDate);
}
否则{
选择日期(moveStartDate、moveEndDate);
}
})
还有。。如果您的SelectDates()执行任何繁重的操作,您可能只想让它每移动x个像素或x毫秒触发一次。。。或者保存这些值,然后在停止时进行处理。My SelectDates()将css添加到日历中,因此我希望它能够随着触摸移动动作不断启动。经过多次搜索,我没有找到简单明了的答案,因此,我自己制作了它,如下所示:
var calendar = $('#calendar').fullCalendar({
..
....
..
dayRender: function( date, cell) {
$(cell).on("touchend",function(event){
var startDate = date;
var x= event.originalEvent.changedTouches[0].clientX;
var y = event.originalEvent.changedTouches[0].clientY
var endDate = moment($(document.elementFromPoint(x, y)).attr("data-date"),"YYYY-MM-DD");
if(endDate>startDate){
calendar.fullCalendar( 'select', startDate, endDate.add('days', 1));
}else{
calendar.fullCalendar( 'select', endDate, startDate.add('days', 1));
}
});
},
select: function(start, end, allDay, jsEvent, view) {
..
....
..
calendar.fullCalendar('unselect');
}
});
Mobile Safari是否有任何控制台输出$(document).ready()可能是个问题,因为jQM使用$(document).bind('pageinit')@PhillPafford在控制台中看不到任何内容。非常感谢您关注这一点。如果你正在尝试单击+拖动,请也仔细考虑一下,然后振作起来,因为我也必须用单击来解决问题。:)我对jquerymobile不太熟悉,但我认为touch+drag与click+drag的工作方式不同。也许你应该在这里考虑其他选择——比如在每个插槽上都有复选框供选择。另外,可能是FullCalendar没有针对移动设备进行优化,无法处理触摸+拖动。@MahavirMunot,你能看看这两者的组合吗-1)不要使用
选择回调,2)将滑动移动事件绑定到.fc day内容(或你想要从渲染的日历中获得的任何更好的元素),3)基于传递给此事件处理程序的event.pageX
和event.pageY
,使用.elementFromPoint(x,y)
获取所选天数,4)使用此调用选择
方法以编程方式选择刷卡的天数。这是一个最好的黑客-让我知道,如果这有帮助!祝你一切顺利!这与我提出的问题完全不同。我相信你的js向导可能可以以更优雅的方式实现同样的解决方案,但我认为这个想法可能对任何有这个问题的人都有帮助。谢谢你添加这个我会检查它。3.感谢你的努力,谢谢你我试过了,但没有成功。。请问你能告诉我什么时候把这个密码或小提琴放进去吗
$('#calendar table.fc-border-separate td.ui-widget-content').on('touchstart', function (event) {
/* touch start processing, probably cancelling like*/
event.preventDefault();
event.stopImmediatePropagation();
function mouseMoveHandler (event) {
/* processing actual drag */
/* possible also cancelling default behavior and instead calling Calendar API */
}
function mouseUpHandler (event) {
/* processing mouse up */
/* some clean up */
$(document).off('touchmove', mouseMoveHandler)
.off('touchend touchleave touchcancel', mouseUpHandler);
}
$(document).on('touchmove', mouseMoveHandler)
.on('touchend touchleave touchcancel', mouseUpHandler);
});
$(document).on('touchmove', '.fc-day', function (e) {
var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
var $startElement = $(this);
var moveStartDate = new Date($startElement.data('date'));
var timezoneOffset = moveStartDate.getTimezoneOffset() * 60000;
moveStartDate.setTime(moveStartDate.getTime() + timezoneOffset);
var rect = $startElement[0].getBoundingClientRect();
var DayHeight = $startElement[0].clientHeight;
var DayWidth = $startElement[0].clientWidth;
var xdif = 0;
if (touch.pageX < rect.left) {
xdif = touch.pageX - rect.left;
}
if (touch.pageX > rect.right) {
xdif = touch.pageX - rect.right;
}
var xDaysAwayDecimal = xdif == 0 ? 0 : (xdif / DayWidth);
var xDaysAway = xdif >= 0 ? Math.ceil(xDaysAwayDecimal) : Math.floor(xDaysAwayDecimal);
var ydif = 0;
if (touch.pageY < rect.top) {
ydif = touch.pageY - rect.top;
}
if (touch.pageY > rect.bottom) {
ydif = touch.pageY - rect.bottom;
}
var yDaysAwayDecimal = ydif == 0 ? 0 : (ydif / DayHeight);
var yDaysAway = ydif >= 0 ? Math.ceil(yDaysAwayDecimal) : Math.floor(yDaysAwayDecimal);
var dayModifier = (yDaysAway * 7) + xDaysAway;
var moveEndDate = new Date(moveStartDate);
moveEndDate.setDate(moveEndDate.getDate() + dayModifier);
if (moveStartDate > moveEndDate) {
SelectDates(moveEndDate, moveStartDate);
}
else {
SelectDates(moveStartDate, moveEndDate);
}
})
var calendar = $('#calendar').fullCalendar({
..
....
..
dayRender: function( date, cell) {
$(cell).on("touchend",function(event){
var startDate = date;
var x= event.originalEvent.changedTouches[0].clientX;
var y = event.originalEvent.changedTouches[0].clientY
var endDate = moment($(document.elementFromPoint(x, y)).attr("data-date"),"YYYY-MM-DD");
if(endDate>startDate){
calendar.fullCalendar( 'select', startDate, endDate.add('days', 1));
}else{
calendar.fullCalendar( 'select', endDate, startDate.add('days', 1));
}
});
},
select: function(start, end, allDay, jsEvent, view) {
..
....
..
calendar.fullCalendar('unselect');
}
});