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

nice-gesture

v1.1.1

Published

A tiny javascript library for multi-touch gestures in mobile web applications.

Downloads

3

Readme

移动端手势库

简介

一个轻量的移动端javascript手势库。

兼容性:

  • Android 5.0+
  • iOS 7.0+

实现思路与方案

你可以参看文章《一步步打造一个移动端手势库》 如果以上文章无法打开,你可以点击这里查看

文章旨在提供一种实现移动手势库的思路,该项目即对文中思路的完整的实现。如果感兴趣,你可以fork本项目后进行完善

支持的手势

  • touch: 原生的touchstart事件
  • move: 原生的touchmove事件
  • end: 原生的touchend事件
  • cancel: 原生的touchcancel事件
  • multitouch: 多个手指触摸事件
  • tap: 单击事件,如果发生了双击则不会执行该事件
  • longtap: 长按事件
  • dbtap: 双击事件
  • multimove: 多个手指滑动事件
  • slide: 滑动事件
  • swipe/swipeLeft/swipeRight/swipeUp/swipeDown: 划动手势,滑动后手指离开触发
  • pinch: 缩放手势
  • rotate: 旋转手势
  • finish: 执行完以上事件后执行的事件

使用方法

1. 安装

方法一、使用script标签引入

(1) 引入dist/nice-gesture.js或者dist/nice-gesture.min.js文件,支持amd和cmd规范,如

  <script src="./dist/nice-gesture.js"></script>

(2)使用npm

npm install --save nice-gesture
import Gesture from 'nice-gesture'

2. 实例化并绑定事件


var ges = new Gesture("#img").on("tap",function(){
  console.log("执行了tap操作");
}).on("dbtap",function(){
  console.log("执行了双击操作")
});
ges.on("longtap",function(e,params){
  console.log("执行了longtap操作");
  console.log(e,params);
})

属性、方法和API

1. 构造函数Gesture(target[,selector])

  • target : 需要绑定事件的dom对象,可传入符合querySelector的选择器或者dom元素

  • selector: 可选,触发事件的子元素,用于事件委托,如target = ul,selector = li,仅支持传入选择器

2. 事件回调函数

所有的触发的事件回调函数均接受两个参数(e, metas)

  • e: 原生的event事件对象,可以通过e.target等进行原生的操作

  • metas: 每次手指触碰开始,触发各个事件时引起各个数据变化,分别如下:

    • deltaX: 触摸和移动时手指每次变化的横坐标

    • deltaY: 触摸和移动时手指每次变化的纵坐标

    • diffX: 触摸和移动时,相对开始触摸时的横坐标

    • diffY: 触摸和移动时,相对开始触摸时的纵坐标

    • angle: 触摸和移动时,旋转的角度

    • zoom: 触摸和移动时,缩放的倍数

    • direction: 划动的方向,值为up/down/left/right中的一个

3. API

  • on(type, callback): 事件的绑定,支持链式调用和多次绑定,如:
var ges = new GT("#tareget");
function handleTap = function(e) {
   console.log('tap has happended');
   console.log(e);
}
ges.on("tap", handleTap)
   .on("tap",function(e,params){})
   .on("swipe",function(e,params){});
  • off(type[,callback]): 卸载对应事件的处理函数,如ges.off("tap", handleTap)将卸载tap事件的处理,不传第二个参数将卸载掉当前事件的所有回调

  • destroy: 销毁对象,ges.destroy()

  • setOptions(obj): 设置参数,目前仅接受longtapTimedistance两个参数,支持链式调用,如:

ges.set({
 distance: 40,//手指滑动后离开屏幕,当滑动的距离超过40px时才会触发swipe手势
 longtapTime: 750 //手指按住750ms后才会触发longtap事件
}).on("longtap",function(){
 console.log("执行了长按事件")
})

例子

1. 综合实例

html代码:


<div class="container">
 <img src="https://avatars2.githubusercontent.com/u/8599535?s=460&v=4" id="img">
</div>
<div class="text-wrap">
 <p>操作图片,下面为操作结果</p>
 <p id="text" class="red"></p>
</div>

javascript代码(引用了transform.js):


var el = document.getElementById('img');
var p = document.getElementById("text");
var initscale = 1;
Transform(el);
function text(str) {
  p.innerHTML = str;
}
new Gesture(el).on('tap',function(){
  text('执行tap事件')
}).on('touch',function(){
  initscale = el.scaleX;
}).on('dbtap',function(){
  (el.scaleX == 2) && (el.scaleX = el.scaleY =  1) || (el.scaleX = el.scaleY  =2);
  text('double tap事件')
}).on("longtap",function(){
  text('执行longtap事件')
}).on('slide',function(params,e){
  el.translateX += params.deltaX;
  el.translateY += params.deltaY;
  e.preventDefault()
}).on('swipeUp',function(params){
  text('swipeUp')
}).on('swipeDown',function(params){
  text('swipeDown')
}).on('swipeLeft',function(params){
  text('swipeLeft')
}).on('swipeRight',function(params){
  text('swipeRight')
}).on('rotate',function(params){
  el.rotateZ += params.angle;
}).on('pinch',function(params){
  el.scaleX = el.scaleY = initscale *params.zoom;
})

效果如下:

缩放和旋转效果请扫描以下二维码在手机查看

2.聊天列表

通常在一些数据列表,如地址库,聊天列表,会有一些左滑删除等操作,结合该手势库也是可以轻松实现。

html代码:

<div class="container">
  <ul id="list">
    <li id="li0">
      <div class="info">
        <div class="avatar" style="background-color:#3cea40;">春</div>
        <div class="mess">
          <p>Dolores</p>
          <p><small>竹外桃花三两枝,春江水暖鸭先知</small></p>
        </div>
      </div>
      <div class="ctrl">
        <div class="del" onclick="remove(0)">
          <span>删除</span>
        </div>
      </div>
    </li>
    <!-- 这里有更多的列表 -->
  </ul>
  <div id="text"></div>
</div>

CSS代码可查看通过源码查看,此处不做讲解。

javascript代码:

var textNode = document.getElementById('text');
var list = document.getElementById("list");
function fillText(str) {
  textNode.innerHTML = str;
}
function remove(index) {
  list.removeChild(document.getElementById('li'+index));
}
lis = list.querySelectorAll('.info');
for(var i = 0, len = lis.length; i < len; i++){
  Transform(lis[i]);//transform实例化
  lis[i].redirect = true;//标记tap时是否跳转
}
//使用事件委托实例化手势
new Gesture("#list",'.info').on('touch',function(e,params){
  var target = params.selector;
  //触摸时所有的列表项恢复初始状态
  for(var i = 0, len = lis.length; i < len; i++){
    lis[i].translateX = 0;
  }
}).on('tap',function(e,params){
  var target = params.selector;
  if(target.redirect) {
    fillText('单击操作,准备跳转到详情窗口');
  } else {
    fillText("单击操作,恢复列表状态");
    target.translateX = 0;
  }
}).on('slide',  function(e,params) {
  var target = params.selector;
  var offset = target.translateX + params.deltaX;
  target.translateX = Math.min(0,Math.max(-68,offset));
  e.preventDefault()
  fillText("滑动操作,慢慢显示操作按钮");
}).on('swipeLeft',function(e,params){
  var target = params.selector;
  target.translateX = params.diffX < -30 ? -68 : 0;
  fillText("左划动操作");
}).on('finish',function(e,params){
  //执行结束后判断平移的距离,小于30恢复,大于等于30则展开操作按钮
  var target = params.selector;
  if(target.translateX < -30){
    target.translateX = -68;
    target.redirect = false;
  } else {
    target.translateX = 0;
    target.redirect = true;
  }
}).on("longtap",function(e,params){
  //longtap主要为安卓用户的操作习惯
  var target = params.selector;
  target.translateX = -68;
  fillText("长按操作,直接显示操作按钮");
});

效果如下:

可以扫一下二维码查看效果:

其他

如果你觉得该手势库对你的应用或者学习有帮助,感谢点个star。该库仅提供基本的手势与手势引起的数据变化,并未实现如缩放、平移等操作。你可以fork该项目并进行更加复杂的一些功能完善。实际应用中,结合示例中的transform库,基本能满足绝大部分的应用场景。以下是我个人的掘金号,欢迎交流。