首先该方法兼容IE7+以上浏览器,可以实现页面上下滚动,而且也可以实现页面左右滚动,每次滚动的距离为屏幕的大小,滚动为加速滚动

javaScript代码如下:

//滚动实现方法,使用鼠标滚轮每次滚动浏览器大小的距离function windowScroll(id, number, direction) {    var oHtml = document.documentElement;    //在IE8以下不支持使用class选取元素,这里采用id    var oContent = document.getElementById(id);    //获取文档的高度    var cHeight;    if(direction === "top" ) {        cHeight = oHtml.clientHeight;    }else if( direction === "left" ) {        cHeight = oHtml.clientWidth;    }

    //用于控制鼠标每个多长时间才能让页面滚动设置的变量    var count = 1;    //在窗口尺寸改变的时候实时给cHeight赋值    window.onresize = function () {        if(direction === "top" ) {            cHeight = oHtml.clientHeight;        }else if( direction === "left" ) {            cHeight = oHtml.clientWidth;        }    };    if(window.addEventListener) {        //用于判断当前浏览器是否为FF        if( navigator.userAgent.toLowerCase().indexOf("firefox") !== -1 ) {            oHtml.addEventListener("DOMMouseScroll", function (e) {                //FF浏览器的滚动条滚动上下判断是与其它浏览器相反的,负值是向上滚动                if( count === 1 ) {                    //滚轮向上滚动时                    if( e.detail < 0 ) {                        upRoll();                    }                    //e.detail是正值说明是想下滚动                    else if( e.detail > 0 ) {                        downRoll();                    }                }                //阻止浏览器页面滚动的默认事件                e.preventDefault();            }, false);        } else {            oHtml.addEventListener('mousewheel',function (e) {                var event = e || window.event;                //当count = 1 时让页面可以滚动                if( count === 1 ) {                    //当鼠标向上滚动时                    if( event.wheelDelta > 0 ) {                        upRoll();                    }                    //当鼠标向下滚动时                    if( event.wheelDelta < 0 ) {                        downRoll();                    }                }                //阻止浏览器滚动的默认事件,防止页面来回晃动                event.preventDefault();            }, {passive: false});        }    } else if(window.attachEvent) {        oHtml.attachEvent("onmousewheel",function(){            console.log(count);            if( count === 1 ){                //当鼠标向上滚动时                if( event.wheelDelta > 0 ) {                    upRoll();                }                //当鼠标向下滚动时                if( event.wheelDelta < 0 ) {                    downRoll();                }            }            //阻止浏览器滚动的默认事件,防止页面来回晃动            return false;        });    }

    //向上滚动时执行的函数    function upRoll(){        if( getElemProp(oContent, direction) >= 0 ) {            console.log("到顶了");        }        else {            elemDisplace(oContent, direction, 30, cHeight);            //如果鼠标不是在顶部往上滚动的话就将count++            count++;            setTimeout(function () {                //当过了1000ms后把count置为1,让页面可以继续滚动                count = 1;            }, 1000);        }    }

    //向下滚动时执行的函数    function downRoll() {        //判断是否滚动到底部        if( getElemProp(oContent, direction) <= -number*cHeight ) {            console.log("到底了");        }        else {            elemDisplace(oContent, direction, -30, cHeight);            //如果鼠标不是在顶部往上滚动的话就将count++            count++;            setTimeout(function () {                //当过了1000ms后把count置为1,让页面可以继续滚动                count = 1;            }, 1000);        }    }}
//让元素加速运动function elemDisplace(elem, direction, speed, distance){    //记录元素当前的位置    var origin = parseInt( getElemProp(elem, direction) );    var pos;    var Timer = setInterval(function(){        pos = parseInt( getElemProp(elem, direction) );        //判断元素是否位移到了指定的地方        if( Math.abs(pos - origin ) >= distance ){            if(speed > 0){                elem.style[direction] = origin + distance + 'px';            }else {                elem.style[direction] = origin - distance + 'px';            }            speed = 0;            clearInterval(Timer);        }else {            //判断元素的位移方向            if(speed > 0) {                speed++;            } else {                speed--;            }            elem.style[direction] = pos + speed + 'px';        }    },15);}

//获取元素属性function getElemProp(elem, prop){    if(window.getComputedStyle){        return parseInt(window.getComputedStyle(elem, null)[prop]);    }else{        return parseInt(elem.currentStyle[prop]);    }}

使用注意事项:1.使用时直接调用windowScroll(id,number,direction)方法将需要滚动的元素id传入第一个参数(注意是直接传入id,不要将id选择器选取出来的元素传入)number是滚动的次数direction是滚动的方向,如果你需要水平滚动需要传入"left"、垂直滚动传入"top"2.其它两个方法是为了封装函数,解决浏览器的兼容性问题

对该方法的一些补充(可以添加点击元素来控制页面的滚动),点击下方链接查看https://www.cnblogs.com/hros/p/10941141.html
原创文章

纯JS阻止浏览器默认滚动事件,实现自定义滚动方法的更多相关文章

  1. js阻止浏览器默认行为

    js阻止浏览器默认行为 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...

  2. JS 阻止浏览器默认行为和冒泡事件

    JS 冒泡事件   首先讲解一下js中preventDefault和stopPropagation两个方法的区别: preventDefault方法的起什么作用呢?我们知道比如<a href=& ...

  3. js阻止浏览器默认事件

    1.阻止浏览器的默认行为 function stopDefault(e) { //如果提供了事件对象,则这是一个非IE浏览器 if(e && e.preventDefault) { / ...

  4. Javascript:阻止浏览器默认右键事件,并显示定制内容

    在逛一些知名图片社区的时候,遇到自己心怡的图片,想要右键另存的时候,默认的浏览器菜单不见了,却出现了如:[©kevin版权所有]之类的信息: 今天在看Javascript事件默认行为相关的知识,所以, ...

  5. js 阻止浏览器默认行为

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. JQuery 阻止js事件冒泡 阻止浏览器默认操作

    //阻止事件冒泡 event.stopPropagation(); //阻止浏览器默认操作 event.preventDefault(); 代码不一定能执行,写给自己看的. 事件冒泡: <a h ...

  7. js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME)

    转自:http://blog.csdn.net/itchiang/article/details/7769341 添加事件   var addEvent = function( obj, type, ...

  8. js停止冒泡和阻止浏览器默认行为

    停止冒泡通用方法: function stopBubble(e) { //如果提供了事件对象,是非IE浏览器 if ( e && e.stopPropagation ) //使用W3C ...

  9. 理解阻止浏览器默认事件和事件冒泡cancelBubble

    一.阻止浏览器默认事件 1.先举个例子说什么是 浏览器的默认事件 : 比如有一个输入框,当我按下字母a,就会在输入框显示字母a.就是浏览器本该发生的事情.小孩子一出生就会汲取母乳一样的道理,这些都是先 ...

随机推荐

  1. Classification and logistic regression

    logistic 回归 1.问题: 在上面讨论回归问题时.讨论的结果都是连续类型.但假设要求做分类呢?即讨论结果为离散型的值. 2.解答: 假设: 当中: g(z)的图形例如以下: 由此可知:当hθ( ...

  2. Oracle创建索引的原则(转)

    Oracle 建立索引及SQL优化 数据库索引: 索引有单列索引复合索引之说 如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引.数据库索引主要进行提高访问 ...

  3. SharePoint 2010 Pop-Up Dialogs SharePoint 2010 弹出对话框

    SharePoint 2010 Pop-Up Dialogs SharePoint 2010 弹出对话框         SharePoint 2010 使得往你的站点加入对话框内容变得出乎意料的简单 ...

  4. iOS 摇一摇功能的实现

    在 UIResponder中存在这么一套方法 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event __OSX_A ...

  5. 蓝牙协议(bluetooth spec)

    1.概述:   蓝牙协议规范遵循开放系统互连参考模型(OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次. SIG(Session Initiation Protocol)所定义的蓝牙技术规范的目 ...

  6. poj2761静态区间第k大

    例题:poj2761 题目要求:给定一个长度为n的序列,给定m个询问,每次询问求[l,r]区间内的第k大: 对于这道题目来说,很多算法都可以使用,比如说树套树(一个负责划分区间,一个负责维护这段区间内 ...

  7. devm_regmap_init_i2c【转】

    本文转载自:http://blog.csdn.net/u011975319/article/details/52128845 本文有此处转载http://blog.csdn.net/luckywang ...

  8. Centos6.8防火墙设置

    # 查看防火墙状态 service iptables status   # 停止防火墙 service iptables stop   # 启动防火墙 service iptables start   ...

  9. 网站建设中用JS判断时间并显示不同内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 关于O_DIRECT的那些事儿

    很久之前落下的坑,一直没怎么记录-.- 一般地,如果在Linux内核中读写一个文件,其IO流程都需要经过Kernel内的page cache层次,如果程序员若想要使用自己开发的缓存系统,那么就可以在打 ...