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 🙏

© 2025 – Pkg Stats / Ryan Hefner

wepg

v0.0.0

Published

web 常用插件

Downloads

4

Readme

说明文档

项目诞生

项目搭建

  1. 创建 git 项目,然后 clone 到本地
git clone
  1. 初始化 package.json 文件
npm init
  1. 创建 .editorconfig 文件
# 安装 editorconfig-cli
npm install -g editorconfig-cli

# 初始化配置
ec init
  1. 创建 .eslintrc.json 文件
# 安装 eslint
npm install eslint --save-dev

# 初始化配置
npx eslint --init

插件开发

闭包的作用

(function($) {
  // do something
})(jQuery)
  1. 避免全局依赖
  2. 避免第三方插件的破坏
  3. 兼容 jQuery 操作符 $ 和 jQuery 对象

开发方式

类级别组件开发:

即给 jQuery 命令空间下添加新的全局函数,也成为静态方法。

jQuery.myPlugin = function () {
  // do something
}

例如:$.ajax()$.extend()

对象级别组件开发:

即挂在 jQuery 原型下的方法,这样通过选择器获取的 jQuery 对象实例也能共享该方法,也称为动态方法。

$.fn.myPlugin = function () {
  // do something
}
// 这里 $.fn === $.prototype

例如:addClass()、attr()等,需要创建实例来调用

链式调用

$.fn.myPlugin = function () {
  return this.each(function () {
    // do something
  })
}

代码说明:

  • return this 返回当前对象,来维护插件的链式调用
  • each 循环实现每个元素的访问

单例模式

$.fn.myPlugin = function () {
  var me = $(this),
    instance = me.data('myPlugin')
  if (!instance) {
    me.data('myPlugin', (instance = new myPlugin()))
  }
}

代码说明:

  • 如果实例存在则不再重新创建实例
  • 利用 data() 来存放插件对象的实例

事件委托

语法:on(events[, selector][, data], handler(eventObject))

描述:在选定的元素上绑定一个或多个事件处理函数

  • events 一个或多个空格分割的是事件类型,例如 click keydown。
  • selector 一个选择器字符串,用于过滤出被选中的元素中能触发时间的后代元素,如果为 null,那么被选中的元素总是能触发事件。
  • 事件触发时,要传递给处理函数的 event.data。
  • handler(eventObject) 事件触发时,执行的函数。

优点:委托事件不仅可以给未创建的后代元素绑定事件外,当需要监视很多元素的时候,委托事件的开销更小。

绑定鼠标滚轮事件

  • JS事件有很多需要兼容的地方,鼠标滚轮事件显然也有额外的差异。包括 IE6 浏览器在内都使用 mousewheel,而只有火狐浏览器使用 DOMMouseScroll。
  • $(document).on('mouseWheel DOMMouseScroll', handler)

如何判断鼠标滚轮方向

  • 其他浏览器通过 wheelDelta 属性来判断,但是火狐浏览器没有这个属性,可以通过 detail 这个属性来判断。
  • 开发中可以发现每次向下滚动时,wheelDelta 都是 -120,但是 detail 确实 3,火狐浏览器方向判断的数值正负与其他浏览器是相反的。

绑定键盘事件 keydown

说明:keydown 事件发生在键盘的键被按下的时候。

原生 js 中判断按下了哪个键是存在兼容问题的:

  • IE 只有 keyCode 属性
  • FireFox 中有个 which 和 charCode 属性
  • Opera 中有 keyCode 和 which 属性等

幸运的是 jQuey 已经解决了这个兼容性的问题。

jQuery 中通过 .witch 属性和 .keyCode 属性来确定按下了哪个键:

  • arrow left 37
  • arrow up 38
  • arrow right 39
  • arrow down 40

transitionend

说明:transitionend 事件会在 CSS transition 结束后触发。

滑动动画

转换 Transform

  • 转换方式
    • 旋转 rotate 例如:transform: rotate(45deg)
    • 缩放 scale 例如:transform: scale(2, 0.5)
    • 移动 translate 例如:transform: translate(100px, -50px)
    • 扭曲 skew 例如:transform: skew(45deg, 45deg)
    • 矩阵变形 matrix(<number>, <number>, <number>, <number>, <number>, <number>)

动画平滑过渡 Transtion

  • 属性
    • transition-property: 设置过渡效果的 CSS 尚需经的名称,例如:background, color 或者 all。
    • transiton-duration: 完成过渡效果需要的事件,以s/ms为单位
    • transition-timing-function: 规定速度效果的速度曲线,例如:linear, ease, ease-in, ease-out, ease-in-out, cubic-bezier
    • transition-delay: 延迟时间,以 s/ms 为单位
    • transition:<transition-property> <transition-duration> <transition-timing-function> <transition-delay>

如何判断浏览器是否支持某个 CSS 属性

  • 实现思路

    • 通过判断某个 element 的 style 中是否存在某个 css 属性。
  • 实现代码

(function (temp) {
  if (temp.style['transition'] !== undefined) {
    return true;
  }
  return false
})(document.createElement('div))

.animate()

语法:.animate(properties[, duration][, easing][, complete])

描述:根据-组 CSS 属性,指定自定义动画

  • properties 一个 CSS属性和值的对象,动画将根据这组对象移动。
  • duration 一个字符串或者数字决定动画运行时间。(slow, normal, fast) ms 为单位。
  • easing 表示动画使用哪种移动函数,linear 和 swing,默认 swing。
  • complete 在动画完成时执行的函数。