Javascript 高级手势使用介绍


Posted in HTML / CSS onApril 21, 2013

  在IE10中新加入的对高级用户输入的识别支持,举例说明:注册一个点击操作,通过一句addEventListener 就能够知道当前用户的点击是哪种设备,是手指的点击,是鼠标的单击还是触控笔的点击(平板设备都会带有触控笔)。

 <canvas id="MyCanvas"></canvas>
    <script>
        MyCanvas.addEventListener(
"MSPointerDown", MyBack, false);
        
function MyBack(e) {
            alert(e.pointerType.toString());
        }
    
</script>

 以上这段代码就是能够识别出当前用户的点击是哪种设备,通过回调的方法中 e.pointerType 还进行判断。鼠标是4,触控笔是3,手指是2。至于值为1是何种设备还有待研究。

还有需要注意的就是 想在javascript中添加对输入设备的识别,注册的方法事件也是有点点区别。

addEventListener 添加的事件为 MSPointerDown

而在IE10中对于这样的多种设备识别中优先处理的手指的点击,前提是不影响功能正常单击的情况下。然而IE10不仅仅能识别用户的输入设备还支持非常多的高级手势

以下为IE10高级手势支持的演示

Javascript 高级手势使用介绍

 

创建手势对象

在您的网站中处理手势的第一步是实例化手势对象。

var myGesture = new MSGesture();

接下来,为该手势提供一个目标元素。浏览器将对该元素触发手势事件。同时,该元素还可以确定事件的坐标空间。

elm = document.getElementById("someElement");

myGesture.target = elm;

elm.addEventListener("MSGestureChange", handleGesture);

最后,告知手势对象在手势识别期间处理哪些指针。

elm.addEventListener("MSPointerDown", function (evt) {

// adds the current mouse, pen, or touch contact for gesture recognition

myGesture.addPointer(evt.pointerId);

});

注意:请不要忘记您需要使用 –ms-touch-action 来配置元素以防止其执行默认触摸操作(例如,平移和缩放),并为输入提供指针事件。

处理手势事件

一旦手势对象具有有效目标并至少添加了一个指针,则其将开始触发手势事件。手势事件可分为两种:静态手势(例如,点击或保持)和动态手势(例如,收缩、旋转和轻扫)。

点击

最基本的手势识别是点击。当检测到点击时,将会在手势对象的目标元素触发 MSGestureTap 事件。不同于单击事件,点击手势只能在用户触摸、按鼠标按钮或使用手写笔触控而不移动时触发。如果您要区分用户点击元素和拖动元素的操作,这一点通常会显得十分有用。

长按

长按手势是指用户使用一个手指触摸屏幕,并保持片刻并抬起而不移动的操作。在长按交互期间,MSGestureHold 事件会针对手势的各种状态而多次触发:

复制代码
代码如下:

element.addEventListener("MSGestureHold", handleHold);
function handleHold(evt) {
if (evt.detail & evt.MSGESTURE_FLAG_BEGIN) {
// Begin signals the start of a gesture. For the Hold gesture, this means the user has been holding long enough in place that the gesture will become a complete press & hold if the finger is lifted.
}
if (evt.detail & evt.MSGESTURE_FLAG_END) {
// End signals the end of the gesture.
}
if (evt.detail & evt.MSGESTURE_FLAG_CANCEL) {
// Cancel signals the user started the gesture but cancelled it. For hold, this occurs when the user drags away before lifting. This flag is sent together with the End flag, signaling the gesture recognition is complete.
}
}

动态手势(收缩、旋转、轻扫和拖动)

动态手势(例如,收缩或旋转)将以转换的形式报告,这与 CSS 2D 转换颇为类似。动态手势可触发三种事件:MSGestureStartMSGestureChange(随着手势的持续而重复触发)和 MSGestureEnd。每个事件都包含缩放(收缩)、旋转、转换和速度等相关信息。

由于动态手势以转换的形式报告,因此使用包含 CSS 2D 转换的 MSGesture 来操作诸如照片或拼图等元素将变得十分轻松。例如,您可以通过下列方式启用缩放、旋转和拖动元素的操作:

复制代码
代码如下:

targetElement.addEventListener("MSGestureChange", manipulateElement);
function manipulateElement(e) {
// Uncomment the following code if you want to disable the built-in inertia provided by dynamic gesture recognition
// if (e.detail == e.MSGESTURE_FLAG_INERTIA)
// return;
var m = new MSCSSMatrix(e.target.style.transform); // Get the latest CSS transform on the element
e.target.style.transform = m
.translate(e.offsetX, e.offsetY) // Move the transform origin under the center of the gesture
.rotate(e.rotation * 180 / Math.PI) // Apply Rotation
.scale(e.scale) // Apply Scale
.translate(e.translationX, e.translationY) // Apply Translation
.translate(-e.offsetX, -e.offsetY); // Move the transform origin back
}

缩放和旋转等动态手势可支持鼠标操作,具体可通过在旋转鼠标滚轮的同时分别使用 CTRL 或 SHIFT 修饰键来实现。

HTML / CSS 相关文章推荐
CSS3+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
css3实现超立体3D图片侧翻倾斜效果
Apr 16 HTML / CSS
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
Jul 21 HTML / CSS
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
Mar 16 HTML / CSS
html5 application cache遇到的严重问题
Dec 26 HTML / CSS
HTML5计时器小例子
Oct 15 HTML / CSS
html5的canvas方法使用指南
Dec 15 HTML / CSS
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
Jan 01 HTML / CSS
HTML5新特性之语义化标签
Oct 31 HTML / CSS
CSS3实现三角形不断放大效果
Apr 13 HTML / CSS
面试必问:圣杯布局和双飞翼布局的区别
May 13 HTML / CSS
使用CSS实现音波加载效果
May 07 HTML / CSS
基于Modernizr 让网站进行优雅降级的分析
Apr 21 #HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
Apr 21 #HTML / CSS
html5+css3实现一款注册表单实例
Apr 17 #HTML / CSS
程序设计HTML5 Canvas API
Apr 08 #HTML / CSS
html5与css3小应用
Apr 03 #HTML / CSS
如何让IE9以下版本(ie6/7/8)认识html5元素
Apr 01 #HTML / CSS
html5 拖拽上传图片实例演示
Apr 01 #HTML / CSS
You might like
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
用js实现多域名不同文件的调用方法
2007/01/12 Javascript
input 高级限制级用法
2009/03/26 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
Python函数参数类型*、**的区别
2015/04/11 Python
python在不同层级目录import模块的方法
2016/01/31 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python 将数据保存为excel的xls格式(实例讲解)
2018/05/03 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
荷兰本土平价百货:HEMA
2017/10/23 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
安全在我心中演讲稿
2014/09/01 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
检讨书怎么写
2015/05/07 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python