兼容ie8的单屏滚动插件Scrollify修改。

项目要做一个类似小米商城那样滚一下鼠标,就滚动一面屏幕的效果,又要求兼容ie8,在网上搜了许多插件,都不好用,只有一个scrollify.js用着还不错。

但是这个插件有一个缺点,就是滚动鼠标滑轮一下就滚动一页,如果你滚了很大一圈,就滚了好几页,所以决定改一下源码,但是又不知道从何改起。

wheelHandler: function(e, t) {
                        e.preventDefault();
                        t = t || -e.originalEvent.detail / 3 || e.originalEvent.wheelDelta / 120;
                        if (l) {
                            clearTimeout(l)
                        }
                        l = setTimeout(function() {
                            if (t < 0) {
                                if (u < i.length - 1) {
                                    u++
                                }
                            } else if (t > 0) {
                                if (u > 0) {
                                    u--
                                }
                            }
                            if (u >= 0) {
                                d(u)
                            } else {
                                u = 0
                            }
                        },
                        25)
            },

这段代码是滑动滚轮执行的代码,u代表的是当前应该滑到的页数,d(u)函数,很明显d函数就是控制页面滚动的函数了,于是发现,只要一滑动滑轮,这两个函数就在不停的运行,也就是说你滑一格就运行一页,滑两格就运行两页。

这个插件还有两个属性,滚动之前和滚动以后,所以我们可以定义一个变量,在滚动之前,值为false,滚动以后,值为true,然后在控制页面滚动的代码里判断,如果是false的话,说明页面还没有滚完,这时候在滚滑轮就不继续执行,如果是true,说明页面滚完了,滚完了就可以继续执行下一个页面了

所以代码改成这样

 wheelHandler: function(e, t) {
                if(fvk==true){
                        e.preventDefault();
                        t = t || -e.originalEvent.detail / 3 || e.originalEvent.wheelDelta / 120;
                        if (l) {
                            clearTimeout(l)
                        }
                        l = setTimeout(function() {
                            if (t < 0) {
                                if (u < i.length - 1) {
                                    u++
                                    //u是页数
                                }
                            } else if (t > 0) {
                                if (u > 0) {
                                    u--
                                }
                            }
                            if (u >= 0) {
                                d(u)
                            } else {
                                u = 0
                            }
                        },
                        25)
                }
                
            },

 

在函数的一开始定义变量fvk,before:function(){}里,吧fvk设为false,after: function() {//在这里把fvk设为true};

这几部完成以后,页面就可以大胆的滑动了,再也不用担心一不小心滑太远的问题。

 

这些问题都解决以后还有一个问题,就是在移动端如果颠倒设备改变屏幕尺寸的时候,这个插件会出错,至今找不到原因,但是刷新一下就好了,所以我的解决办法很简单粗暴,只要页面大小一改变,当前页面就刷新一遍

$(window).resize(function(){
  window.location.reload();
})

这样简单粗暴的方法,特别适合我们这种一个人完成的小型项目。

posted @ 2017-03-16 15:05  holdonBestrong  阅读(602)  评论(0编辑  收藏  举报