html5中文学习网

您的位置: 首页 > html5教程 > 入门教程 » 正文

Javascript 高级手势使用介绍_html5教程技巧

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

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

 <canvas id="MyCanvas"></canvas>ye6HTML5中文学习网 - HTML5先行者学习网
    <script>ye6HTML5中文学习网 - HTML5先行者学习网
        MyCanvas.addEventListener(
"MSPointerDown", MyBack, false);ye6HTML5中文学习网 - HTML5先行者学习网
        
function MyBack(e) {ye6HTML5中文学习网 - HTML5先行者学习网
            alert(e.pointerType.toString());ye6HTML5中文学习网 - HTML5先行者学习网
        }ye6HTML5中文学习网 - HTML5先行者学习网
    
</script>

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

还有需要注意的就是 想在javascript中添加对输入设备的识别,注册的方法事件也是有点点区别。ye6HTML5中文学习网 - HTML5先行者学习网

addEventListener 添加的事件为 MSPointerDownye6HTML5中文学习网 - HTML5先行者学习网

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

以下为IE10高级手势支持的演示ye6HTML5中文学习网 - HTML5先行者学习网

ye6HTML5中文学习网 - HTML5先行者学习网

 ye6HTML5中文学习网 - HTML5先行者学习网

创建手势对象ye6HTML5中文学习网 - HTML5先行者学习网

在您的网站中处理手势的第一步是实例化手势对象。ye6HTML5中文学习网 - HTML5先行者学习网

var myGesture = new MSGesture();ye6HTML5中文学习网 - HTML5先行者学习网

接下来,为该手势提供一个目标元素。浏览器将对该元素触发手势事件。同时,该元素还可以确定事件的坐标空间。ye6HTML5中文学习网 - HTML5先行者学习网

elm = document.getElementById("someElement");ye6HTML5中文学习网 - HTML5先行者学习网

myGesture.target = elm;ye6HTML5中文学习网 - HTML5先行者学习网

elm.addEventListener("MSGestureChange", handleGesture);ye6HTML5中文学习网 - HTML5先行者学习网

最后,告知手势对象在手势识别期间处理哪些指针。ye6HTML5中文学习网 - HTML5先行者学习网

elm.addEventListener("MSPointerDown", function (evt) {ye6HTML5中文学习网 - HTML5先行者学习网

// adds the current mouse, pen, or touch contact for gesture recognitionye6HTML5中文学习网 - HTML5先行者学习网

myGesture.addPointer(evt.pointerId);ye6HTML5中文学习网 - HTML5先行者学习网

});ye6HTML5中文学习网 - HTML5先行者学习网

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

处理手势事件

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

点击

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

长按

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

复制代码
代码如下:
ye6HTML5中文学习网 - HTML5先行者学习网
element.addEventListener("MSGestureHold", handleHold);ye6HTML5中文学习网 - HTML5先行者学习网
function handleHold(evt) {ye6HTML5中文学习网 - HTML5先行者学习网
if (evt.detail & evt.MSGESTURE_FLAG_BEGIN) {ye6HTML5中文学习网 - HTML5先行者学习网
// 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.ye6HTML5中文学习网 - HTML5先行者学习网
}ye6HTML5中文学习网 - HTML5先行者学习网
if (evt.detail & evt.MSGESTURE_FLAG_END) {ye6HTML5中文学习网 - HTML5先行者学习网
// End signals the end of the gesture.ye6HTML5中文学习网 - HTML5先行者学习网
}ye6HTML5中文学习网 - HTML5先行者学习网
if (evt.detail & evt.MSGESTURE_FLAG_CANCEL) {ye6HTML5中文学习网 - HTML5先行者学习网
// 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.ye6HTML5中文学习网 - HTML5先行者学习网
}ye6HTML5中文学习网 - HTML5先行者学习网
}ye6HTML5中文学习网 - HTML5先行者学习网
ye6HTML5中文学习网 - HTML5先行者学习网
动态手势(收缩、旋转、轻扫和拖动) ye6HTML5中文学习网 - HTML5先行者学习网

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

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

复制代码
代码如下:
ye6HTML5中文学习网 - HTML5先行者学习网
targetElement.addEventListener("MSGestureChange", manipulateElement);ye6HTML5中文学习网 - HTML5先行者学习网
function manipulateElement(e) {ye6HTML5中文学习网 - HTML5先行者学习网
// Uncomment the following code if you want to disable the built-in inertia provided by dynamic gesture recognitionye6HTML5中文学习网 - HTML5先行者学习网
// if (e.detail == e.MSGESTURE_FLAG_INERTIA)ye6HTML5中文学习网 - HTML5先行者学习网
// return;ye6HTML5中文学习网 - HTML5先行者学习网
var m = new MSCSSMatrix(e.target.style.transform); // Get the latest CSS transform on the elementye6HTML5中文学习网 - HTML5先行者学习网
e.target.style.transform = mye6HTML5中文学习网 - HTML5先行者学习网
.translate(e.offsetX, e.offsetY) // Move the transform origin under the center of the gestureye6HTML5中文学习网 - HTML5先行者学习网
.rotate(e.rotation * 180 / Math.PI) // Apply Rotationye6HTML5中文学习网 - HTML5先行者学习网
.scale(e.scale) // Apply Scaleye6HTML5中文学习网 - HTML5先行者学习网
.translate(e.translationX, e.translationY) // Apply Translationye6HTML5中文学习网 - HTML5先行者学习网
.translate(-e.offsetX, -e.offsetY); // Move the transform origin backye6HTML5中文学习网 - HTML5先行者学习网
}ye6HTML5中文学习网 - HTML5先行者学习网
ye6HTML5中文学习网 - HTML5先行者学习网
ye6HTML5中文学习网 - HTML5先行者学习网
缩放和旋转等动态手势可支持鼠标操作,具体可通过在旋转鼠标滚轮的同时分别使用 CTRL 或 SHIFT 修饰键来实现。ye6HTML5中文学习网 - HTML5先行者学习网

ye6HTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助