npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

watch-event

v1.0.5

Published

use for keydown

Downloads

5

Readme

监听事件模块

version: 1.0.3 ## 增加修改发布可以传递任意参数给订阅的函数

万物皆有变化,当发生变化时做相对应的动作,故为监听。在按键监听时才用一事件名 对应多个 keyCode

用途 :

对监听事件进行封装,提高可读性。在这主要先对订阅发布模式和键盘事件的封装。

如何使用

你可以通过 npm 包获取:

  npm install watch-event

或者在 html 中引入

  <script src="./control-script.js"></script>

注意: 1. 所有通过本 npm 包所创建的自定义键盘事件都必须以.press结尾。 2. 本模块使用 ES6 语法,请使用 babel 编译。

API

实例化

实例化可以传入键值对,也可以不传参数默认为电脑端的键值对,但目前只有包括方向, 数字键,enter 和 esc。

支持事件节流 参数 keyValue < Object > | isThrottle < Boolean | false > | interval < Number | 500 >

  const keyValue = {
    'enter': 17,
    'up': 57
  }
  const controlor = new Controler(keyValue,true, 300);

addPress 添加按键值,键名为事件名,键值为keyCode。事件名是为了监听所用。

arguments | Object

  controlor.addPress({'play': 10});

delPress 删除事件名,参数是事件名数组。

arguments | Array

  controlor.delPress(['play']);

subscribe

订阅事件,参数为事件名、回调函数,并且返回解绑函数。

arguments | String | Function

  // 之后会添加发布回来的消息
  // 1.0.3版本已经可以传参数了
  const unSubscribe = controlor.subscribe('play',(data)=>{
    console.log(data)
  });

  // 解绑
  unSubscribe();

publish

发布事件,参数为事件名。

arguments | String

  // 发布事件
  controlor. publish('play',data)
思考:

对于 keydown 事件而言,在工程实践中,我更倾向于把它理解成一个遥控器操作多个 电器。

一个房间可以有多个遥控器,红外线的或者是 wifi 的。即你可以通过不同的遥控器,来 控制节奏,比如是否节流。

也可以把电器添加到遥控器的白名单,进行操作,当不想操控的时候直接移除,不论电器 是否有接收的接口。比如视频和界面都添加了一个实例的左右键事件,当进入视频,界面 解绑遥控器就算监听了事件,也无法触发。返回界面后视频亦然。

当然要注意不同的遥控器操作同一个接口要使用不同的事件名,不要因为相同的电器,相 同的接口,不同的遥控器而导致误操作。推荐使用遥控器名作为后缀。

addListener

arguments | el

绑定监听对象,注意: keydown 事件绑定在 document 上,而且实际上只绑定一次。 原理是通过 keydown 事件的触发来遍历所有绑定好的 DOM 元素触发对应的事件。有点像 document 是信息集散地,addListener 即订阅数据。

  improt Controlor from 'keydownEvent';

  const controlor = new  Controlor();
  controlor.addListener(document.body);

removeListener

arguments | el

删除 DOM,从而监听对应的 DOM 元素上的键盘事件失效。 注意:所有的绑定事件还 是生效的。只是不会被触发。如果只是对自定义事件解绑,请使用原生解绑。

controlor.removeListener(document.body)

~~keydownTrigger~~ DEL

~~手动触发自定义事件方法~~ ~~* 注意:解绑过后的事件是无法被触发的,参数可 以监听事件的名称也可以是键名。*~~

说明:目前个人觉得有了发布订阅的 API,此 API 作用不大,转为模块内部自用。传参 也变为传入事件 event 对象。如果真要使用请传入以下 JSON 对象作为参数:

// 传参对象
 const evt = {
   keyCode: 12, // 键值
   target: element, // DOM对象
   type: 'play' // 事件名
 }
  controlor.addListener(document.body);

  document.body.addEventListener('play', ev => {
    console.log('this is body!');
  });

  const evt = {
    keyCode: 12, // 键值(可以忽略)
    target: document.body, // DOM对象
    type: 'play' // 事件名
  }

  controlor.keydownTrigger(evt);

getElems 获取所有监听的 DOM 对象,返回一个 DOM 元素数组。

controlor.getElems()

getKeycode 获取所有键值对,返回一个 Object。

controlor.getKeycode()

demo

  improt Controlor from 'watch-event';

  const keyOpts = {
    enter: 17, // 实际是alt键
    RL: [37, 39] // RL即对应2个键值
  }
  // 这里首先会覆盖掉 enter事件的13,然后再覆盖alt的事件名。
  // 遵循默认配置会被覆盖,一事件名对应多个键值的原则。
  const controlor = new Controlor(keyOpts);

  const play = document.querySelector('#videoPlayer');
  const main = document.querySelector('#main');

  // 每个DOM元素都使用原生监听自定义事件
  play.addEventListener('RL', ev => {
      if(ev.detail.keyCode === 37){
        console.log('this is Left!');
      }else {
        console.log('this is Right!');
      }
    });

  main.addEventListener('RL', ev => {
      console.log('this is html!');
  });

  // ...此处省略监听部分代码
  if(isVideo){

    // 是否为播放视频界面,如果是,移除main,遥控器只对play有效。
    controlor.removeListener(main);
    controlor.addListener(play);
  }else{
    controlor.addListener(main);
    controlor.removeListener(play);
  }

  // 设置全局事件节流
  const controlor = new Controlor(keyOpts, true, 300);