前端-【学习心得】-自己定义一个触摸函数

我们平时制作移动端的web项目的时候通常会使用到zept,jqmobile这样的移动端框架,他们都对触摸事件做好了封装,也就是说不论你是鼠标点击或者触摸都能得到响应。但是这些移动的框架有时候会显得过于庞大,对于性能方面也会有影响,所以最好的办法是自己定义触摸事件。

原理是首先检测浏览器的触摸函数,如果存在就使用触摸,如果不存在就使用click,下面贴出代码,代码源码出自h5触摸一书。

  (function(){           var TOUCHSTART, TOUCHEND;           //正常的触摸事件判断      if (typeof(window.ontouchstart) != ‘undefined‘) {                     TOUCHSTART = ‘touchstart‘;           TOUCHEND   = ‘touchend‘;                //微软的触摸事件      } else if (typeof(window.onmspointerdown) != ‘undefined‘) {           TOUCHSTART = ‘MSPointerDown‘;           TOUCHEND   = ‘MSPointerUp‘;      } else {           TOUCHSTART = ‘mousedown‘;           TOUCHEND   = ‘mouseup‘;      }                function NodeFacade(node){                     this._node = node;                }           NodeFacade.prototype.getDomNode = function() {           return this._node;      }           NodeFacade.prototype.on = function(evt, callback) {                     if (evt === ‘tap‘) {                this._node.addEventListener(TOUCHSTART, callback);           } else if (evt === ‘tapend‘) {                this._node.addEventListener(TOUCHEND, callback);           } else {                this._node.addEventListener(evt, callback);           }                     return this;                }      NodeFacade.prototype.off = function(evt, callback) {           if (evt === ‘tap‘) {                this._node.removeEventListener(TOUCHSTART, callback);           } else if (evt === ‘tapend‘) {                this._node.removeEventListener(TOUCHEND, callback);           } else {                this._node.removeEventListener(evt, callback);           }                     return this;      }           window.$ = function(selector) {          var node = document.querySelector(selector);          if(node) {                return new NodeFacade(node);           } else {                return null;           }      }           })();$(‘.button‘).on(‘tap‘, function(e) {      e.preventDefault();      togglePicture();      e.target.className = "active button"; }).on(‘tapend‘, function(e) {      e.target.className = "button"; });

可以看到先定义了NodeFacade的对象,这种叫做节点门面,就是说我定义好自己的事件,在最外面检测完后获得浏览器具体支持的事件,最终确定执行触摸还是点击。这里一个完整的触摸或者点击事件都是由相应的touchstart和touchend 或者mousedown,mouseup构成,只检测一次浏览器支持的事件然后返回NodeFacade对象,此时这个对象包含具体的事件类型,然后定义好此对象的On和off方法来注册和取消事件。

时间: 2024-11-06 09:32:51

前端-【学习心得】-自己定义一个触摸函数的相关文章

小小六的前端学习心得

打算写这篇文章已经好久了,但是文采不行,不知道如何下笔,今天终于鼓起勇气用我拙劣的作文水平来讲述一下这段时间我学习前端开发的心得. 先从我的专业说起.我本人是学计算机的.全名是叫计算机科学与技术(软件方向),学校虽然是一个211学校,学习成绩也还行,但是对于编程这一块,真的是很弱很弱.所以我对计算机编程真正的学习是从实习这段时间开始的.说到这里,我必须得感谢带我进入前端的学长.因为他我才能在今天坐在这里写这篇学习心得. 所以,首先最好是有一个愿意耐心的指导你学习的人,也就是一个好的师傅.他能根据

CREATE FUNCTION - 定义一个新函数

SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE langname | IMMUTABLE | STABLE | VOLATILE | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT | [EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY

web前端学习心得

所谓行万里路,必先始于足下.刚开始学习WEB前端基础的时候,老师说,其实你们学的这个后面真正去工作的时候可能也不是很会用到,所以就有很多人会问,既然我们都用不到,那干嘛还学呀?其实,对于一个程序员来说,你不仅要有很好的后端专业能力,你还应当具备一定的前端素养,知道一些起码的前端知识. 来到传智的第一个月,我们是以基础为主吧,因为大家到这里的基础都不一样,有一些本身就具备很高水准的人,也有很多像自己一样从小白开始的人,所以,对我们而言,传智开设的这种双元模式对我们是有很大用处的.我们从最基础的开始

我的MYSQL学习心得(十) 自定义存储过程和函数

我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习

好程序员web前端学习路线分享函数基础

好程序员web前端学习路线分享函数基础,在这之前先来讲一下函数是什么? 函数就一个代码块,可以是一个完全独立与其它内容没有关系的代码块,也可以是一个与外界环境紧密相关的代码块.函数是一个拥有输入和输出的独立代码块.函数是程序中最重要的组成部分. 函数,是一种封装(将一些语句,封装到函数里面).通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行. 在javascript里,函数即对象,程序可以随意操控它们.函数可以嵌套在其他函数中定义,这样它们就可以访问它们被定义时所处的作用域中的

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

一.结构体中可以定义一般的宏定义 如: struct aaa{   #define STATUS_1 100   #define STATUS_2 200   #define STATUS_3 300   ........}: 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的.   一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告.可是如果不在结构体之内,名字重复可肯定是error.(未证实,可以做实验,而且可以把两处的

我的MYSQL学习心得(十)

原文:我的MYSQL学习心得(十) 我的MYSQL学习心得(十) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 我的MYSQL学习心得(九) 我的MYSQL学习心得(十一) 我的MYSQL学习心得(十二) 这一篇<我的MYSQL学习心得(十)>将会讲解MYSQL的存储过程和函数 MYSQL中创建存储过程

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

C++学习笔记(八):函数重载、函数指针和函数对象

函数重载 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处. 试想如果没有函数重载机制,如在C中,你必须要这样去做:为这个print函数取不同的名字,如print_int.print_string.这里还只是两个的情况,如果是很多个的话,就需要为实现同一个功能的函数取很多个名字,如加入打印long型.char*.各种类型的数组等等.