【事件】封装touch触摸事件 --- DOM2级、单点触控

//封装touch触摸事件 --- DOM2级、单点触控
if (!Object.prototype.addTouchEvents) {
    Object.defineProperty(Object.prototype, ‘addTouchEvents‘, {
        value: function(Obj) {
            var noop = function() {};
            var defaults = {
                start: noop, //开始
                move: noop, //移动
                end: noop, //结束
                left: noop, //结束(向左)
                right: noop, //结束(向右)
                top: noop, //结束(向上)
                down: noop, //结束(向下)
                long: noop, //结束(长按)
                click: noop, //结束(点击)
                x: 380, //触发 left || right 的界值 (px)
                y: 380, //触发 top || down 的界值 (px)
                speed: 180, //触发 left || right || top || down 的界值 (px/0.3s)
                isPropagate: true //是否传播
            };
            var Params = {};
            for (var p in defaults) {
                if (defaults.hasOwnProperty(p)) {
                    if (Obj[p] === false || Obj[p] === 0) {
                        Params[p] = Obj[p];
                    } else {
                        Params[p] = Obj[p] || defaults[p];
                    }
                }
            }
            var StartX, StartY, StartTime;
            var Change = {};

            this.addEventListener(‘touchstart‘, function(e) {
                if (!Params.isPropagate) e.stopPropagation();
                if (e.targetTouches.length === 1) {
                    StartX = e.targetTouches[0].pageX;
                    StartY = e.targetTouches[0].pageY;
                    StartTime = new Date().getTime();
                    Change.x = 0;
                    Change.y = 0;
                    Params.start(e, Change);
                }
            }, false);
            this.addEventListener(‘touchmove‘, function(e) {
                e.preventDefault();
                if (!Params.isPropagate) e.stopPropagation();
                if (e.targetTouches.length === 1) {
                    Change.x = e.targetTouches[0].pageX - StartX;
                    Change.y = e.targetTouches[0].pageY - StartY;
                    Params.move(e, Change);
                }
            }, false);
            this.addEventListener(‘touchend‘, function(e) {
                if (!Params.isPropagate) e.stopPropagation();
                if (e.targetTouches.length === 0) {
                    Params.end(e, Change);
                    var changeTime = new Date().getTime() - StartTime,
                        abcChangeX = Math.abs(Change.x),
                        abcChangeY = Math.abs(Change.y),
                        speedX = abcChangeX / (changeTime / 300),
                        speedY = abcChangeY / (changeTime / 300);
                    if (abcChangeX > abcChangeY && (abcChangeX > Params.x || speedX > Params.speed)) {
                        if (Change.x < 0) {
                            Params.left(e, Change);
                        } else {
                            Params.right(e, Change);
                        }
                    } else if (abcChangeY > abcChangeX && (abcChangeY > Params.y || speedY > Params.speed)) {
                        if (Change.y < 0) {
                            Params.top(e, Change);
                        } else {
                            Params.down(e, Change);
                        }
                    } else if (abcChangeX < 5 && abcChangeY < 5) {
                        if (changeTime > 300) {
                            Params.long(e, Change);
                        } else {
                            Params.click(e, Change);
                        }
                    }
                }
            }, false);
        }
    });
}

//使用情况
div.addTouchEvents({
    start: function(e, change) {
        console.log(‘‘);
        console.log(‘开始‘);
    },
    move: function(e, change) {
        console.log(‘移动‘);
    },
    end: function(e, change) {
        console.log(‘结束  ‘ + JSON.stringify(change));
    },
    left: function(e, change) {
        console.log(‘向左‘);
    },
    right: function(e, change) {
        console.log(‘向右‘);
    },
    top: function(e, change) {
        console.log(‘向上‘);
    },
    down: function(e, change) {
        console.log(‘向下‘);
    },
    long: function(e, change) {
        console.log(‘长按‘);
    },
    click: function(e, change) {
        console.log(‘点击‘);
    },
    x: 380, //触发 left || right 的界值 (px)
    y: 380, //触发 top || down 的界值 (px)
    speed: 180, //触发 left || right || top || down 的界值 (px/0.3s)
    isPropagate: true //是否传播
});
时间: 2024-07-30 13:52:45

【事件】封装touch触摸事件 --- DOM2级、单点触控的相关文章

【Cocos2D-X 学习笔记】为精灵添加单点触控

由于Cocos2d-x处于新学的阶段,因此最近也无法进行系统地更新,只会选择一些典型的Demo贴上来,一来是与大家分享,而来也可以作为以后回顾时的参考. 今天介绍一下Cocos2d-x的触摸事件处理,了解Android开发的朋友们知道,Android里会用一个OnClickListener()进行事件监听,而在J2SE中也会有Event类实现专门的监听处理.在Cocos2d-x中,因为是游戏引擎,用户在玩游戏时总是要通过屏幕与游戏进行交互,可想而知触摸事件是主要处理的事件.这里主要讲一下如何为精

Touch事件 移动端touch触摸事件

<!-- HTML5 --> <!DOCTYPE html> <html> <head> <title>TouchEvent测试</title> <meta charset="gbk"> </head> <body> <h2>TouchEvent测试</h2> <br /> <div id="version" styl

cocos2d-x 事件分发机制 ——触摸事件监听

cocos2d-x 3.0 出来已经好久了,也已经用3.0写了几个小游戏,感觉3.0的事件触发机制太赞了,随这里总结一下,也算是对知识的一种回忆和加深理解. 3.0的事件分发机制中,需要也仅仅需要通过创建一个事件监听器来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有的事件监听器由这个分发器统一管理,即可完成事件响应. 事件监听器有以下几种: 1.EventListenerTouch(触摸事件) 2.EventListenerKeyboard(键盘响应事件) 3.

从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法

本篇文章假设读者没有任何的触摸事件基础知识,所以我们会从最基本的触摸事件分发处说起. ScrollView为什么会出现嵌套EditText出现滑动事件冲突呢?相信你会有这种疑问,我们来看这么一种情况: 有一个固定高度的EditText,假设它只能显示3行文本,但是,我们在其中输入的文本多余三行时,那么这时就需要可以在EditText内部进行小幅滚动了.那么将这个EditText放入了ScrollView当中, 并且ScrollView内容过多以致ScrollView也可以滑动,这时候就会出现Ed

Android单点触控技术,对图片进行平移,缩放,旋转操作

相信大家使用多点对图片进行缩放,平移的操作很熟悉了,大部分大图的浏览都具有此功能,有些app还可以对图片进行旋转操作,QQ的大图浏览就可以对图片进行旋转操作,大家都知道对图片进行缩放,平移,旋转等操作可以使用Matrix来实现,Matrix就是一个3X3的矩阵,对图片的处理可分为四个基础变换操作,Translate(平移变换).Rotate(旋转变换.Scale (缩放变换).Skew(错切变换),如果大家对Matrix不太了解的话可以看看这篇文章(点击查看),作者对每一种Matrix的变换写的

Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标

都说 Intel 第八代 CPU 对比上代是牙膏不小心挤多了,而配备第八代 CPU 的 MacBook Pro,只有 Touch Bar 版本,虽然贵了一点,但就一个字 -- 买! 收到电脑后,兴冲冲地体验了一把 Touch Bar,真的很有新鲜感!前提是你是一个影像工作者. 然而随着时间推移,我的 Touch Bar 渐渐地变成了一个耗电的无用配件,还时不时地误触到「Siri」按钮.只有当我调整音量或亮度的时候,我才会有意识地使用 Touch Bar,让我多花的钱,显得有那么些意义-- 可是今

【iOS开发-85】利用touch触摸事件:实现画板画画、撤销、清屏以及图片保存功能

(1)效果 (2)代码下载 http://download.csdn.net/detail/wsb200514/8251841 (3)总结 --最主要的"画"的功能是在drawRect函数中完成,而所有路径或者点得拼接是在touchesBegan.touchesMoved和touchesEnded三个函数中完成的. --每次修改后记得要setNeedsDisplay刷新. --可以记录每个CGPoint点,然后用CGContextRef上下文画出来. --也可以开启一个UIBezier

单点触控

TouchEvent.class package com.bwie.touch; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.v

android——单点触控移动,多点触控放大缩小

xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context