我正在开发一个小项目,我正在使用光滑的旋转木马。问题是我想在第一个和最后一个元素的情况下停止拖动。知道怎么做吗?
如果是第一个和最后一个元素,如何停止拖动?
var readyToDrag = true;
jQuery('.responsive').slick({
dots: false,
infinite: false,
speed: 300,
slidesToShow: 1,
slidesToScroll: 1,
draggable: true,
onBeforeChange: function(event, slick, currentSlide, nextSlide){
if(event.currentSlide == 3){
readyToDrag = false;
alert(readyToDrag);
}
},
draggable: readyToDrag,
responsive: [{
breakpoint: 1000,
settings: {
slidesToShow: 2,
slidesToScroll: 2,
infinite: false,
dots: false
}
}, {
breakpoint: 999,
settings: {
slidesToShow: 2,
slidesToScroll: 2,
infinite: false
}
}, {
breakpoint: 767,
settings: {
slidesToShow: 2,
slidesToScroll: 2,
infinite: false,
draggable: readyToDrag,
}
}]
});
答案 0 :(得分:0)
看起来我迟到了; P
这是我未来访问者的解决方案,请查看JSFiddle。
一些观察
transform
css属性0 <= value <= ($containerWidth - $trackwidth)
,其中 $ containerWidth 是包含可见幻灯片和 $ trackWidth 是包含所有幻灯片的元素的宽度。> 0
,则会出现左侧过度滚动,如果为>
($containerWidth - $trackwidth)
则会出现右侧过度滚动x-axis
转化中translate3d()
的值。 阻止转型发生:
此解决方案的关键是拦截和阻止(如有必要)要应用于光滑元素的转换。
要做到这一点,我做的是
css()
方法来拦截调用并检查transform
css属性0 <= value <= ($containerWidth - $trackwidth)
为真,允许转型。拦截器:
(function($) {
// use regex to extract x-translation value
var reg = /-?\d+/g;
$.fn.css = (function(orig) {
return function CSSTranslateListener() {
var isTranslate = !!arguments[0]['transform']
if (!isTranslate) {
// apply regular changes
orig.apply(this, arguments);
} else {
// is a translate event!
// trigger an event with a pseudo-resolve that we can call
// if we want the translation to happen and a the tranlation value
// debugger;
var evt = new $.Event("slickEdgeTrigger");
var args = [].slice.call(arguments);
var resolver = orig.bind.apply(orig, [].concat([this], args))
$(this).trigger(evt, [resolver, +args[0]['transform'].match(reg)[1]])
}
}
})($.fn.css)
})(jQuery)
处理程序:
// $w is the width of container (see https://jsfiddle.net/boka8yrj)
$('.carousel').on('slickEdgeTrigger', function(evt, fn, by) {
if(by >= ($w - $('.slick-track').width()) && by <= 0){
fn()
}
})
});
警告:
$(...).css()
还有其他办法吗?
好吧,Slick是一个开源项目,因此您可以随时下载副本并对其进行修改以满足您的需求。要实现上述行为,您可以在this point添加拦截和处理程序逻辑。这是计算变换值的地方,所以你只需要在this函数内检查上面提到的条件,如果条件为假,则提前返回。