为了账号安全,请及时绑定邮箱和手机立即绑定

如何将绑定事件和移除事件封装为一个函数?

如何将绑定事件和移除事件封装为一个函数?

精慕HU 2018-12-20 22:19:04
我想设置一个名为 bindKeys 的函数,如下:function bindKeys (flag) {        function keydown(e) {      if (e.keyCode == 27) {        keys.push('l');      }    }            function keyup(e) {      if (e.keyCode == 27) {        keys.pop();      }    }    if(flag) {        window.addEventListener('keydown', keydown);        window.addEventListener('keyup', keyup);    }else {        window.removeEventListener('keydown', keydown);        window.removeEventListener('keyup', keyup);    }}我是想通过flag判断是绑定事件还是解除绑定。可是我们都知道,每次调用这个函数时,keydown函数和keyup函数都会声名为新的函数,导致解除绑定失效。那有没有什么办法实现这一功能呢?难道必须要将keydown函数和keyup函数声名为全局函数吗?求解答!
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

用闭包保留上下文

function bindKeys () {    

    var keydown = function(e) {

      if (e.keyCode == 27) {

        keys.push('l');

      }

    };

    var keyup = function(e) {

      if (e.keyCode == 27) {

        keys.pop();

      }

    };

    return function(flag) {

    if(flag) {

        window.addEventListener('keydown', keydown);

        window.addEventListener('keyup', keyup);

    }else {

        window.removeEventListener('keydown', keydown);

        window.removeEventListener('keyup', keyup);

    }

    }

}

使用:

var fn = bindKeys();

fn(true);

fn(false);


查看完整回答
反对 回复 2019-01-05
  • 1 回答
  • 0 关注
  • 438 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号