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 🙏

© 2026 – Pkg Stats / Ryan Hefner

jslever

v1.0.2

Published

打造自己的js武器库

Readme

jslever

打造自己的js开发武器库

使用方法

  1. 直接在浏览器中引入dist目录下的jslever.min.js文件。jslever.min.js文件执行完成之后,会在浏览器的window对象上挂一个属性jslever,该属性是一个对象,可以通过该对象访问所有组件和功能函数。

  2. 如果只需要使用jslever中的部分组件或者函数,可以通过ES6语法“import”在代码中按需引入功能组件或者函数。

功能组件或函数使用方法介绍

图片懒加载组件lazyloader

示例:

_this = jslever.lazyloader({
    // 需要侦听的事件名,默认侦听'scroll'事件
    event: 'scroll',
    // 侦听事件的目标元素选择器, 默认值为'body'
    target: 'body',
    // 自定义用来存储图片真实链接的属性, 默认值为'data-src', 同时该属性作为懒加载图片的标志
    dataMark: 'data-src',
    // 以本次要加载的图片为中心,前后预先加载的图片数
    preload: 1,
    // scroll函数节流参数, 默认延时16ms, 执行周期20ms
    throttleOptions: {
        delay: 16,
        interval: 20
    }
});

如果使用默认配置,则相关属性可以省略不写。具体的应用可以参照test/lazyloader/index.html。_this表示当前lazyloader对象,用来操纵lazyloader对象对应的属性和方法。_this可以操纵的属性和方法介绍如下:

1. imgArr 用来存储当前lazyloader对应的所有懒加载图片DOM
2. options 当前lazyloader配置
3.
/**
 * [search 找到当前页面中已经展示的图片在imgArr中的首尾下标,用于图片预加载]
 * @returns null或者属性为start(起始下标)和end(结束下标)的对象
 */
search()
4.
/**
 * [loadPartial 加载imgArr下标从start到end的元素]
 * @param start
 * @param end
 * @returns {lazyloader}
 */
loadPartial(start, end)
5.
/**
 * [load 实现图片懒加载函数,调用了loadPartial]
 * @returns {lazyloader} 当前调用的lazyloader对象
 */
load()
6.
/**
 * [bindEvts 事件绑定函数]
 * [lazyloader的启动函数]
 * @returns {lazyloader} 当前调用的lazyloader对象
 */
bindEvts()
7.
/**
 * [unbindEvts: 解绑事件函数]
 * [lazyloader的摧毁函数]
 * @returns {lazyloader} 当前调用的lazyloader对象
 */
unbindEvts()
8.
/**
 * [Create lazyloader对象构造函数]
 * @param options 自定义配置
 * @returns {lazyloader} 构造出来的lazyloader对象
 */
Create(options = {})

滚动条组件roller

该组件的目的是实现列表的竖直滚动(呈3D弧形滚动),如滚动时间选择器中选择年、月、日的滚动栏逻辑。

_this = jslever.roller({
    // roller对应的选择器, 默认为'roller'
    target: '.roller',
    // roller中每个选项对应的选择器, 默认为'.item'
    item: '.item',
    // 初始选中选项的序号,从0开始,默认为0
    index: 0,
    // 滚动选择器每一个选项在滚动过程中旋转角度步长,单位为deg,默认为25度
    rotateStep: 25,
    // 每列选择完成之后的回调函数,用来实现多列滚动条之间的联动
    callback: function () {
    }
})

该组件只是实现了js逻辑,并没有实现UI部分,UI可以参考/test/roller/index.html中的样式。_this是当前roller对象,可以用来操纵roller对象对应的属性和方法。可以操纵的属性和方法介绍如下:

1. options 当前roller配置
2.
/**
 * [setInitItem 设置初始选中的条目]
 * @returns {Roller}
 */
setInitItem()
3.
/**
 * [updateRotate 更新条目的旋转角度]
 * @param  {Boolean} isTouchend [标志函数调用是否发生在touchend事件被触发时]
 * @param  {number} delta 整个Roller的平移增量
 * @return {Roller}             [当前Roller对象]
 */
updateRotate(isTouchend, delta)
4.
/**
 * [bindEvts 事件绑定函数,Roller的开启函数]
 * @return {Roller}     [当前Roller对象]
 */
bindEvts()
5.
/**
 * [bindEvts 事件解绑函数,Roller的关闭函数]
 * @returns {Roller}
 */
unbindEvts()

控制页面滚动到某一点的组件scrollTo

示例:

/**
 * scrollTo scrollTo函数的wrapper,便于使用
 * @param to 目的地scrollTop值
 * @param duration 滚动持续时间,单位为毫秒(ms)
 * @returns {Scroller} Scroller类,可以使用其中的静态函数
 */
Scroller = jslever.scrollTo(to, duration);

通过Scroller可以使用的方法有:

1.
/**
 * request 自定义的requestAnimationFrame的替代函数
 * @param callback 回调函数
 * @returns {number} requestId
 */
request(callback)
2.
/**
 * cancel 自定义的cancelAnimationFrame的替代函数
 * @param {number} requestId
 */
cancel(requestId)
3.
/**
 * getRequestAnimationFrame 获取当前浏览器支持的requestAnimationFrame函数
 * @returns 当前浏览器支持的requestAnimationFrame函数
 */
getRequestAnimationFrame()
4.
/**
 * getCancelAnimationFrame 获取当前浏览器支持的cancelAnimationFrame函数
 * @returns 当前浏览器支持的cancelAnimationFrame函数
 */
getCancelAnimationFrame()
5.
/**
 * getScrollTop 获取当前页面scrollTop属性值
 * @returns {number} scrollTop属性值,单位为px
 */
getScrollTop()
6.
/**
 * setScrollTop 设置当前页面scrollTop属性值
 * @param value 像素值
 */
setScrollTop(value)
7.
/**
 * scrollTo 页面滚动到指定位置动画
 * @param to 目的地scrollTop值
 * @param duration 滚动持续时间,单位为毫秒(ms)
 */
scrollTo(to, duration)

相册滑动组件slider

示例:

_this = jslever.slider({
    // 相册选择器,默认为slider,在使能render的情况下,选择器只能是class选择器
    target: '.slider',
    // 相册图片总数
    total: 0,
    // 配置相册首显图片的序号,默认为0
    index: 0,
    // 配置是否循环滑动
    loop: false,
    // 判断相册是否翻页的滑动阈值
    threshold: 60,
    // 图片懒加载配置
    lazyload: {
        enable: true,
        event: 'transitionend',
        target: '.slider',
        dataMark: 'data-src',
        preload: 1,
        throttleConfig: {
            delay: 16,
            interval: 20
        }
    },
    // 轮播配置
    carousel: {
        enable: false,
        // 轮播间隔
        interval: 5000,
        // 轮播方向‘left’ or 'right'
        flow: 'right'
    },
    // 配置是否使用javascript插入相册html, 注意:该配置使用的是默认UI, 使用javascript设置样式。建议使用者自己实现UI设计, 提高代码可维护性。
    render: {
        enable: false,
        // 相册容器的选择器
        container: '.slider-container',
        // 相册所有图片的链接信息
        data: [],
    },
    /**
     * 相册每次滑动时需要执行的用户自定义操作
     * @param index 即将展示的图片的序号,非负整数
     * @param ctx 当前相册DOM
     */
    plugin: function (index, ctx) {
    },
    // 相册图片间有间隙时,通过配置gap的initExtraOffset和commonExtraOffset可以保证相册每张图片都是居中显示
    gap: {
        // 设置首显图片时,相册需要额外移动的距离,相对于相册container宽度的百分比
        initExtraOffset: 0,
        // 普通滑动时,相册需要额外移动的距离,相对于相册container宽度的百分比
        commonExtraOffset: 0
    }
});

_this代表当前slider对象,其可以通过unbindEvts()和stopCarouse()来分别停止相册的手指滑动翻页和定时轮播功能。相册的DOM结构和CSS样式,可以参考test/slider/index.html。

移动端图片缩放组件zoomer

示例:

/**
 * selector 图片元素类选择器
 */
Zoomer = jslever.zoomer(selector);

注意:selector只能是类选择器。可以通过Zoomer.stopZoomer()停止图片放大功能。

宽松检查用户输入手机号码是否合法 checkMobileLoose

/**
 * checkMobileLoose 宽松检测字符串是否是手机号码,以1开头的数字字符串全返回true
 * @param str 待检查字符串
 * @returns {boolean}
 */
checkMobileLoose(str)

示例:

jslever.checkMobileLoose('13333333333');
返回true

严格检查用户输入的手机号码是否合法 checkMobileStrict

/**
 * checkMobileStrict 严格检测字符串是否是手机号码,只有对于真实的手机号码返回true
 * @param str
 * @returns {boolean}
 */
checkMobileStrict(str)

示例:

jslever.checkMobileStrict('17610826114');
返回true

对html字符串转义函数,防止XSS攻击 escapeHTML

/**
 * escape 对html字符串转义函数,防止XSS攻击
 * @param html 待转义的html字符串
 * @return 转义后的html字符串
 */
escapeHTML(html)

对象扩充函数 extend

参考jQuery extend实现和使用方式。

判断对象是否是函数 isFunction

示例:

jslever.isFunction(new Function());
返回true

判断对象是否是普通对象(不含原型)isPlainObject

参考jQuery中isPlainObject的实现,https://jquery.com/

节流函数 throttle

/**
 * [throttle 节流函数,用于优化频繁触发的事件,如scroll事件,提高页面性能]
 * @param  {[Function]} handler  [事件处理函数]
 * @param  {[Object]}   config   [throttle配置文件,默认配置
 * {
 * // 延时,单位毫秒(ms)
 * delay: 40,
 * // 最小执行周期,单位毫秒(ms)
 * interval: 60
 * }
 * @return Function        [新函数]
 */
jslever.throttle(handler, config);

getUrlQueries 获取给定url的查询参数键值对信息

/**
 * getUrlQueries 获取给定url的查询参数键值对信息
 * @param url 待提取的url
 * @returns {{}} 返回一个对象,对象的属性名是查询参数的名字,属性值是查询参数名字对应的值
 */
jslever.getUrlQueries(url);

isNum 判断值是否是合法的十进制数字形式

/**
 * isNum 判断值是否是合法的十进制数字形式
 * @param value 待检测的值
 * @returns {boolean}
 */
jslever.isNum(value);