阻止网页内部滚动条mousewheel事件冒泡

Posted 听雨的人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阻止网页内部滚动条mousewheel事件冒泡相关的知识,希望对你有一定的参考价值。

利用鼠标滚轮对网页内部无素滚动条触发滚动事件,当滚动条到达元素顶部或底部时不触发浏览器窗口的滚动事件。

通过调用以下函数实现:

function preventScroll(id){  
    var _this = document.getElementById(id);  
    if(navigator.userAgent.indexOf("Firefox")>0){  
        _this.addEventListener(\'DOMMouseScroll\',function(e){  
            _this.scrollTop += e.detail > 0 ? 60 : -60;     
            e.preventDefault();  
        },false);   
    }else{  
        _this.onmousewheel = function(e){     
            e = e || window.event;     
            _this.scrollTop += e.wheelDelta > 0 ? -60 : 60;     
            return false;  
        };  
    }  
    return this;  
}  

参考资料:http://www.cnblogs.com/weekend001/archive/2011/05/11/2043474.html 

IE9不支持类似 e.returnValue = false  这种写法,相应的地方改成return false即可。

jquery插件:

$.fn.extend({
    "preventScroll": function () {//阻止滚动
        $(this).each(function () {
            var _this = this;
            if (navigator.userAgent.indexOf(\'Firefox\') >= 0) {   //firefox  
                _this.addEventListener(\'DOMMouseScroll\', function (e) { e.preventDefault(); }, false);
            } else {
                _this.onmousewheel = function (e) {
                    return false;
                };
            }
        })
    },
    "areaScroll": function () {//区域防止冒泡滚动
        $(this).each(function () {
            var _this = this;
            if (navigator.userAgent.indexOf(\'Firefox\') >= 0) {   //firefox  
                _this.addEventListener(\'DOMMouseScroll\', function (e) {
                    _this.scrollTop += e.detail > 0 ? 60 : -60;
                    e.preventDefault();
                }, false);
            } else {
                _this.onmousewheel = function (e) {
                    e = e || window.event;
                    _this.scrollTop += e.wheelDelta > 0 ? -60 : 60;
                    return false;
                };
            }
        })
    }
});

 

以上是关于阻止网页内部滚动条mousewheel事件冒泡的主要内容,如果未能解决你的问题,请参考以下文章

js阻止默认事件的方法

scroll时不能平滑滚动的问题怎么处理

使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)

阻止默认事件,滚轮事件与滚动事件

c# MouseWheel Scroll 和 RTB VScroll 事件

better-scroll中嵌套原生滚动组件,原生滚动组件失效问题