我有一个可拖动的元素,我试图让它在屏幕外完成,通过动画将其设置为左:100%,如果它是屏幕右边缘的60%。含义40%或更少是可见的。
我知道我是否有条件检测是否隐藏了60%或更少,因为它内部发出警报。
但是,我调用只执行jQuery动画的自定义函数不会发生。
这是一个重复我的问题的JS小提琴:http://jsfiddle.net/bccQh/1/
如果将元素向右拖动,它会淡出。这样就证明handleOpacity()
自定义函数正在运行。用于检测元素是否为60%或更多屏幕外的if条件是有效的,因为当条件为真时,当前已注释掉的警报将触发。但是第二个自定义函数slideLeft()
的调用不会发生,就在警报之后。
为什么自定义功能没有发生以及我如何才能实现?
这是我的代码:
$('#tabViewWindow').pep({
axis:'x',
useCSSTranslation:false,
drag:function(ev, obj){
if(obj.dx>0 && obj.$el.offset().left>=$(window).width()*0.6){
slideLeft(ev, obj);
}
handleOpacity(ev, obj);
},
});
function handleOpacity(ev, obj){
var opacity = 1 - (parseInt(obj.$el.css('left'))/$(window).width());
obj.$el.css('opacity', opacity);
}
function slideLeft(ev, obj){
obj.$el.animate({left:'100%'});
}
答案 0 :(得分:1)
Pep使用jQuery animate
来改变元素被拖动时的位置。当您拨打slideLeft
时,您仍在拖动它,因此Pep的animate()
会继续推进并覆盖animate
中的slideLeft
来电。
解决方法是在致电slideLeft
后停止Pep。查看Pep的文档,您可以在致电stopEvent
时设置.pep()
属性,然后在slideLeft
中触发它。像这样:
$('#tabViewWindow').pep({
axis:'x',
useCSSTranslation:false,
stopEvents: "stopPep", // <---- Stop when we get a "stopPep" event
drag:function(ev, obj){
if(obj.dx>0 && obj.$el.offset().left>=$(window).width()*0.6){
slideLeft(ev, obj);
}
handleOpacity(ev, obj);
},
});
function slideLeft(ev, obj){
obj.$el.trigger("stopPep"); // <---- Tell Pep to stop here!
obj.$el.stop().animate({left:"100%"});
}
function handleOpacity(ev, obj){
var opacity = 1 - (parseInt(obj.$el.css('left'))/$(window).width());
obj.$el.css('opacity', opacity);
}