IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

超级小的web手势库AlloyFinger发布

腾讯AlloyTeam 2016-06-06 23:34:30 累计浏览 2,153 次
本机暂存

简介

针对多点触控设备编程的Web手势组件,快速帮助你的web程序增加手势支持,也不用再担心click 300ms的延迟了。拥有两个版本,无依赖的独立版和react版本。除了Dom对象,也可监听Canvas内元素的手势(需要Canvas引擎内置对象支持addEventListener绑定touch相关事件)。

据不完全统计,目前AlloyFinger服务于:兴趣部落、QQ群、QQ动漫、腾讯学院、TEDxTencent、 AlloyTeam、腾讯CDC等多个部门、团队和项目。

功能清单

极小的文件大小
简洁的API设计
优秀的性能
丰富的手势支持
双版本(react和独立版)

事件

支持pinch缩放
支持rotate旋转
支持pressMove拖拽
支持doubleTap双击
支持swipe滑动
支持longTap长按
支持tap按
支持singleTap单击

快速上手

独立版使用方式:

//element为需要监听手势的dom对象
newAlloyFinger(element,{
    pointStart:function(){
        //手指触摸屏幕触发
    },
    multipointStart:function(){
        //一个手指以上触摸屏幕触发
    },
    rotate:function(evt){
        //evt.angle代表两个手指旋转的角度
        console.log(evt.angle);
    },
    pinch:function(evt){
        //evt.scale代表两个手指缩放的比例
        console.log(evt.scale);
    },
    multipointEnd:function(){
        //当手指离开,屏幕只剩一个手指或零个手指触发
    },
    pressMove:function(evt){
        //evt.deltaX和evt.deltaY代表在屏幕上移动的距离
        console.log(evt.deltaX);
        console.log(evt.deltaY);
    },
    tap:function(evt){
        //点按触发
    },
    doubleTap:function(evt){
        //双击屏幕触发
    },
    longTap:function(evt){
        //长按屏幕750ms触发
    },
    swipe:function(evt){
        //evt.direction代表滑动的方向
        console.log("swipe"+evt.direction);
    },
    singleTap:function(evt){
        //单击
    }
});

react版使用方式:

render(){
    return(
        <AlloyFinger
            onTap={this.onTap.bind(this)}
            onMultipointStart={this.onMultipointStart.bind(this)}
            onLongTap={this.onLongTap.bind(this)}
            onSwipe={this.onSwipe.bind(this)}
            onPinch={this.onPinch.bind(this)}
            onRotate={this.onRotate.bind(this)}
            onPressMove={this.onPressMove.bind(this)}
            onMultipointEnd={this.onMultipointEnd.bind(this)}
            onDoubleTap={this.onDoubleTap.bind(this)}>
            <div className="test">你要监听手势的Dom!</div>
        </AlloyFinger>
    );
}

官网DEMO

http://alloyteam.github.io/AlloyFinger/

Q&A

1.必须跟transformjs一起用吗?
不必须。也可以在事件回调里根据evt携带的信息使用js去操作CSS3。但是一起用,会让代码更简洁。
2.pinch、rotate事件怎么在chrome浏览器调试的?
一般用真机调试,但是也可以使用chrome浏览器,传送门 http://www.html5rocks.com/en/mobile/touch/#toc-touchdev
3.缩放的origin点设置,这里是想手在图片哪个区域操作就设置哪里为origin进行缩放?
自己去计算就是两个手指的连线的中点的坐标,

比如中点X:

   pinch:function(evt){
        console.log((evt.touch[0].pageX+evt.touch[1].pageX)/2);
    },

然后根据这个坐标和图片的坐标计算图片缩放的origin
4.拖拽位置、缩放大小是否可以限制(始终在屏幕内显示,避免出现缩到很小看不到的情况)
这个不应该有 AlloyFinger 控制。而应该由你的逻辑去控制

Github

https://github.com/AlloyTeam/AlloyFinger

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. JQuery实现Excel表格呈现 (累计阅读 48,350)
  2. 深入理解Javascript之执行上下文(Execution Context) (累计阅读 18,404)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,933)
  4. 图片动态局部毛玻璃模糊效果的实现 (累计阅读 14,849)
  5. 天朝第二代身份证号码的验证机制 (累计阅读 14,762)
  6. HTML 5 的data-* 自定义属性 (累计阅读 14,349)
  7. 分享一个JQUERY颜色选择插件 (累计阅读 14,223)
  8. 什么是全栈工程师? (累计阅读 14,038)
  9. 快速排序(Quicksort)的Javascript实现 (累计阅读 11,735)
  10. 7 天打造前端性能监控系统 (累计阅读 11,187)