带有事件源event的事件,如何多个事件调用?

功能:在做移动端页面,点击按钮弹出灰色的遮罩登录框,这时也弹出遮罩,需让后面的body不能再滚动了,效果如下:

https://img2.mukewang.com/5c078bd4000136ff03650458.jpg

代码:
html

 

      <p class="btn">点击出现弹框</p>
      <div id = "box">
         <p>弹框主体</p>
      </div>
      <div>遮罩</div>

要实现移动端,出现弹框时页面不能再滚动,用touchmove,阻止默认事件实现
js

https://img4.mukewang.com/5c078bf40001f20004960489.jpg

问题描述
弹框出现时绑定的touchmove事件,我想在关闭弹框时,把那个不允许滚动的事件取消,但是,如果用我上面的写法,浏览器不会知道on 和 off 事件是指同一个的,,,于是我把阻止页面的function拎出来了函数stopTouchMove,on和off都把他执行,还是不行!


    var stopTouchMove = function(param){

        param.preventDefault();

    }

    

    //出现弹框,不许滚动

    $(document).on('touchmove',function(e){

                stopTouchMove(e);

            });

            

    //隐藏弹框,再次滚动

    $(document).off('touchmove',function(e){

                stopTouchMove(e);

            });


问题:
1、这个方法有什么问题?如何解决这种要传入事件源本身的匿名函数,都要调用的情况?
2、是否有手机端,有其他的方法实现此功能?

白衣染霜花
浏览 543回答 1
1回答

郎朗坤

你都提到了匿名函数,那么你改后的方案还是匿名函数呀//出现弹框,不许滚动&nbsp; &nbsp; $(document).on('touchmove',function(e){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stopTouchMove(e);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; //隐藏弹框,再次滚动&nbsp; &nbsp; $(document).off('touchmove',function(e){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stopTouchMove(e);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });你改的这里依然是匿名函数。。。你离答案仅仅差一步而已改成$(document).on('touchmove', stopTouchMove)$(document).off('touchmove', stopTouchMove)就可以了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript