zoukankan      html  css  js  c++  java
  • AlloyTouch Button插件-不再愁click延迟和点击态

    移动端不能使用click,因为click会有300ms。所有有了fastclick这样的解决方案。然后fastclick并没有解决点击态(用户点击的瞬间要有及时的外观变化反馈)的问题。hover会有不消失的问题,所有大家一般用:active。利用 :active 伪类来设置某元素被点击时的点击态样式。
    在IOS上使用active必须声明下面js:

    document.addEventListener("touchstart", function() {},false);
    

    CSS中记得去掉highlight color:

    -webkit-tap-highlight-color: rgba(0,0,0,0);
    

    需要注意的是:Android 2.x 仍不支持:active。

    那么就 fastclick + :active + 一堆声明 + 放弃部分系统的兼容?

    有没有更好的解决方案?且看AlloyTouch Button插件~~

    语法

      new AlloyTouch.Button(selector, onTap [,activeClass]) 
    
    • selector:需要变成按钮的选择器
    • onTap: 用户点击按钮的回调函数
    • activeClass:可选参数,点击状态下添加的class

    使用方式

    new AlloyTouch.Button("#button", function () {
        console.log("You tapped me.");
    }, "active");
    

    在线演示

    原理

     AlloyTouch.Button = function (selector, tap, active) {
        var element = typeof selector === "string" ? document.querySelector(selector) : selector;
        var option = {
            touch: selector,
            tap: tap,
            preventDefault: false
        };
        if (active !== undefined) {
            option.touchStart = function ( ) {
                addClass(element, active);
            };
            touchMove = function ( ) {
                removeClass(element, active);
            };
            option.touchEnd = function ( ) {
                removeClass(element, active);
            };
            option.touchCancel = function () {
                removeClass(element, active);
            };
        }
    
        new AlloyTouch(option);
    }
    

    在创建Button对象实例的时候,其实创建了AlloyTouch对象实例。这里分析在option。

    • touch: selector 需要变成按钮的的对象
    • tap: tap 直接把创建button的tap传给alloytouch的tap
    • preventDefault: false 不阻止默认事件。不然的话,手指放在button上时,页面拖不动。

    当用户传入了active参数时候,分别给绑定了touchMove、toucStart、touchEnd和touchCancel事件。

    • touchMove、touchEnd和touchCancel均会移除active的class。
    • toucStart会增加active的class。

    最后

    更多例子演示和代码可以在Github上找到。
    Github:https://github.com/AlloyTeam/AlloyTouch

  • 相关阅读:
    火狐下,td 的 bug;
    在centos6.3用yum安装redis
    Linux系统下修改环境变量PATH路径的三种方法
    网络文件常常提到类似"./run.sh"的数据,这个命令的意义是什么?
    DataGridView的自定义列排序
    【Linux】linux常用基本命令
    用户名 不在 sudoers文件中,此事将被报告。(转)
    将XML文件中的内容转换为Json对象
    C# 加载xml文档文件及加载xml字符串
    增加不存在的列
  • 原文地址:https://www.cnblogs.com/iamzhanglei/p/6164637.html
Copyright © 2011-2022 走看看