be-fe / iSlider

Smooth mobile touch slider for Mobile WebApp, HTML5 App, Hybrid App
http://be-fe.github.io/iSlider/
MIT License
1.66k stars 448 forks source link

Bug: tap or click #234

Closed zllu closed 9 years ago

zllu commented 9 years ago

$("#iSlider-wrapper").on("click", function () { Api.imagePreview(imgUrl[0], imgUrl); }); 点击事件无效.....

xieyu33333 commented 9 years ago

请提供更多的信息,就给这么一句,没有任何上下文根本没法进行任何判断啊。

zllu commented 9 years ago

我这边应用场景是点击silder的图片/dom打开微信里面的全屏图片查看控件 1.wiki里面提到了上面绑定点击事件的方式,试了下,无效 2.我做了改写,新增了onclick,65行 // Callback function when the finger move out of the screen this.onslideend = opts.onslideend; //以下是新增
this.onclick = opts.onclick; ///553行 if (el.className === 'islider-dom') {

///在getLink方法内新增触发onclick if (_this._opts.onclick) { _this._opts.onclick(_this.slideIndex); } return false ; } 使用的时候 var islider = new iSlider({ dom: document.getElementById('iSlider-wrapper'), type: "dom", data: uiData, duration: 2000, isVertical: false, isLooping: true, isDebug: true, isAutoplay: true, onclick: function (i) { alert(i) } });

这边的alert总是被触发两次,第一次点击silder item,第二次点击body的任何部分都会出发,这个问题只会在手机端重现(我用的微信内置webview调试),用chrome是模拟不出来的,能不能帮忙分析下这个问题

xieyu33333 commented 9 years ago

事件绑定应该使用事件代理的方式,可以使用jQuery或者zepto的on()方法,如果没有使用这类库,iSlider也提供了bind方法来进行事件代理。

       islider.bind('tap', '.wrap', function(){
            alert('aaa')
        })
xieyu33333 commented 9 years ago

bind方法的第二个参数是容器内部,也就是你的content中的某个元素的选择器,如果你使用容器本身则不管用。

zllu commented 9 years ago

多谢,现在问题解决了。用我上面的方法, onclick: function (i) { //alert(i) 弹出微信imagePreview } 当弹出微信窗口后问题解决,但是如果还是放alert的话,在安卓下面是没有问题,ios版微信下面还是有2次alert,没太理解是什么原因导致这个问题的,不过还是谢谢你的解答