详细问题描述
[内容]
(1) mui(slider).slider()的横向滚动(循环滚动时),无法监听到滚动事件:
document.getElementById('Gallery').addEventListener('slide', function(e) {});//这个监听不到
(2) 左右滚动,不能判断是向左滚动还是向右滚动,如果能够判断,那就可以实现左滚下一页,右滚上一页。
重现步骤
[步骤]
Hbuilder自带的MUI实例中的grid-pagination.html界面,
步骤:
①左右滚动有3个默认项,删除2个。
②给id为Gallery的div添加监听事件:
document.getElementById('Gallery').addEventListener('slide', function(e) {
//输出log日志[如果滚动项只有1个,这个方法是不执行,如果滚动项有多个,这个方法就会执行]
console.log(e.detail.slideNumber);
});
[结果] 监听事件不执行
[期望]
在左右滚动时,无论滚动项有多少个(最少1个),那监听方法也需要执行。因为在项目中,很多操作需要左右滚动完成后才开始调用执行(比如界面中部分动画效果),如果只有一个滚动项,就无法确认滚动的结束时间,导致滚动结束后的相关效果无法完成。
运行环境 谷歌浏览器 F12 手机模式
[系统版本]
[浏览器版本] 54.0.2840.99 m
[IDE版本] 7.6.0.201611071800
[mui版本] Mui v3.1.0
附件
[代码片段] mui.init();
mui.ready(function() {
var slider = document.getElementById('Gallery');
var group = slider.querySelector('.mui-slider-group');
var items = mui('.mui-slider-item', group);
//克隆第一个节点
var first = items[0].cloneNode(true);
first.classList.add('mui-slider-item-duplicate');
//克隆最后一个节点
var last = items[items.length - 1].cloneNode(true);
last.classList.add('mui-slider-item-duplicate');
//处理是否循环逻辑,若支持循环,需支持两点:
//1、在.mui-slider-group节点上增加.mui-slider-loop类
//2、重复增加2个循环节点,图片顺序变为:N、1、2...N、1
var sliderApi = mui(slider).slider();
function toggleLoop(loop) {
if(loop) {
group.classList.add('mui-slider-loop');
group.insertBefore(last, group.firstChild);
group.appendChild(first);
sliderApi.refresh();
sliderApi.gotoItem(0);
} else {
group.classList.remove('mui-slider-loop');
group.removeChild(first);
group.removeChild(last);
sliderApi.refresh();
sliderApi.gotoItem(0);
}
}
//按下“循环”按钮的处理逻辑;
document.getElementById('Gallery_Toggle').addEventListener('toggle', function(e) {
var loop = e.detail.isActive;
toggleLoop(loop);
});
document.getElementById('Gallery').addEventListener('slide', function(e) {
console.log(e.detail.slideNumber);
});
});
[安装包]
联系方式
[QQ] 369731934
[电话]