首页 > 其他分享 >jquery:临时禁止鼠标滚动 How to disable scrolling temporarily?

jquery:临时禁止鼠标滚动 How to disable scrolling temporarily?

时间:2023-04-28 11:10:05浏览次数:51  
标签:jquery function temporarily column disablescroll preventDefault How window docum


1. 代码:



// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};

function preventDefault(e) {
  e = e || window.event;
  if (e.preventDefault)
      e.preventDefault();
  e.returnValue = false;  
}

function preventDefaultForScrollKeys(e) {
    if (keys[e.keyCode]) {
        preventDefault(e);
        return false;
    }
}

function disableScroll() {
  if (window.addEventListener) // older FF
      window.addEventListener('DOMMouseScroll', preventDefault, false);
  window.onwheel = preventDefault; // modern standard
  window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
  window.ontouchmove  = preventDefault; // mobile
  document.onkeydown  = preventDefaultForScrollKeys;
}

function enableScroll() {
    if (window.removeEventListener)
        window.removeEventListener('DOMMouseScroll', preventDefault, false);
    window.onmousewheel = document.onmousewheel = null; 
    window.onwheel = null; 
    window.ontouchmove = null;  
    document.onkeydown = null;  
}



 

实例:http://output.jsbin.com/xatidu/4/

转自:http://stackoverflow.com/a/4770179/4484798

 

2. 以上功能的jquery版:



/**
 * $.disablescroll
 * Author: Josh Harrison - aloofdesign.com
 *
 * Disables scroll events from mousewheels, touchmoves and keypresses.
 * Use while jQuery is animating the scroll position for a guaranteed super-smooth ride!
 */(function(e){"use strict";function r(t,n){this.opts=e.extend({handleKeys:!0,scrollEventKeys:[32,33,34,35,36,37,38,39,40]},n);this.$container=t;this.$document=e(document);this.lockToScrollPos=[0,0];this.disable()}var t,n;n=r.prototype;n.disable=function(){var e=this;e.lockToScrollPos=[e.$container.scrollLeft(),e.$container.scrollTop()];e.$container.on("mousewheel.disablescroll DOMMouseScroll.disablescroll touchmove.disablescroll",e._handleWheel);e.$container.on("scroll.disablescroll",function(){e._handleScrollbar.call(e)});e.opts.handleKeys&&e.$document.on("keydown.disablescroll",function(t){e._handleKeydown.call(e,t)})};n.undo=function(){var e=this;e.$container.off(".disablescroll");e.opts.handleKeys&&e.$document.off(".disablescroll")};n._handleWheel=function(e){e.preventDefault()};n._handleScrollbar=function(){this.$container.scrollLeft(this.lockToScrollPos[0]);this.$container.scrollTop(this.lockToScrollPos[1])};n._handleKeydown=function(e){for(var t=0;t<this.opts.scrollEventKeys.length;t++)if(e.keyCode===this.opts.scrollEventKeys[t]){e.preventDefault();return}};e.fn.disablescroll=function(e){!t&&(typeof e=="object"||!e)?t=new r(this,e):t&&t[e]&&t[e].call(t)};window.UserScrollDisabler=r})(jQuery);


var $nonScrollable = $("#non-scrollable")

$nonScrollable.disablescroll();

$("button").on("click", function() {
    $nonScrollable.disablescroll("undo");
});



 

实例:http://jsfiddle.net/5s01jg4s/

 

3. 自定义用法,简单的使用 ($left_column 和 $right_column 为页面左右栏):



$left_column.hover(function(){$right_column.bind("mousewheel", function(e) { e.preventDefault(); return false; });},function(){$right_column.unbind("mousewheel");});
$right_column.hover(function(){$left_column.bind("mousewheel", function(e) { e.preventDefault(); return false; });},function(){$left_column.unbind("mousewheel");});



 

 


标签:jquery,function,temporarily,column,disablescroll,preventDefault,How,window,docum
From: https://blog.51cto.com/u_8895844/6233558

相关文章

  • GMaps.js:让你快速集成 Google Maps 服务的 jQuery 插件
    GMaps.js功能除了添加指定经纬度的标准地图之外,GMaps.js还能定义地图放大的级别,添加标注,获取当前用户的地理位置(HTML5geolocation),定义路线,绘制折线,并且实现这些功能只需要简单的几行代码。另外GMaps.js每个动作都有callback函数让你去集成自定义事件。目前GMaps.js没有详......
  • jquery.liMarqee.js无缝滚动的使用问题
    引入jq、liMarquee.js和liMarquee.css文件<scriptsrc="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script><scriptsrc="./js/jquery.liMarquee.js"></script><linkrel="stylesheet&quo......
  • nacos报错:Nacos cluster is running with 1.X mode, can't accept gRPC request tempo
    nacos报错:Nacosclusterisrunningwith1.Xmode,can'tacceptgRPCrequesttemporarilynacos报错如下:Causedby:com.alibaba.nacos.api.exception.NacosException:Requestnacosserverfailed:atcom.alibaba.nacos.client.naming.remote.gprc.NamingGrp......
  • How to use axios.js instead of request.js to get data as a buffer All In One
    Howtouseaxios.jsinsteadofrequest.jstogetdataasabufferAllInOne如何使用axios.js代替request.js获取数据作为缓冲区questionconstfs=require("fs");varpath=require("path");const{exit}=require("process");//requ......
  • How to get Linux kernel Information using the command line All In One
    HowtogetLinuxkernelInformationusingthecommandlineAllInOne如何使用命令行获取Linux内核信息uname#macOS$uname-aDarwinxgqfrms-mm.local22.2.0DarwinKernelVersion22.2.0:FriNov1102:08:47PST2022;root:xnu-8792.61.2~4/RELEASE_X86_64x......
  • jQuery效果-隐藏与显示
    <!DOCTYPEhtml><html><head><metacharset="utf-8"/><title></title><scriptsrc="../../Scripts/jquery-3.4.1.min.js"></script><scriptsrc="Index.js"><......
  • How do I make a delicious lemon cheesecake?
    Therearemanydifferentwaystoprepareadeliciouslemoncheesecake.Hereisonepopularrecipethatyoucantry:Ingredients:21/4cupsgrahamcrackercrumbs(about150crackers)3tablespoonssugar8ozcreamcheese,softened1cupgranulatedsugar1......
  • jQuery HTML-删除元素
    <!DOCTYPEhtml><html><head><metacharset="utf-8"/><title></title><scriptsrc="../../Scripts/jquery-3.4.1.min.js"></script><scriptsrc="delete.js">&l......
  • jQuery HTML之添加元素
    <!DOCTYPEhtml><html><head><metacharset="utf-8"/><title></title><scriptsrc="../Scripts/jquery-3.4.1.min.js"></script><scriptsrc="AddContent.js">&......
  • 第1章 jQuery入门
    学习要点:1.什么是jQuery2.学习jQuery的条件3.jQuery的版本4.jQuery的功能和优势5.其他JavaScript库6.是否兼容低版本IE7.下载及运行jQuery一.什么是jQueryjQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一整套定义好的方法。它的作者是JohnResig,于2006年创建的一个开......