资讯专栏INFORMATION COLUMN

JavaScript 事件——“事件类型”中“设备事件”和“触摸与手势事件”的注意要点

Ethan815 / 655人阅读

摘要:对象不包含任何信息事件事件,该事件已被移除,应该使用事件但是事件仍然是实验性的事件,目前有部分浏览器暂时不支持。每个触摸事件的对象都提供了在鼠标事件中常见的属性。

设备事件 orientationchange事件

该事件的window.orientation属性中包含3个值:0表示肖像模式、90表示左旋转的横向模式、-90表示右旋转的横向模式。event对象不包含任何信息:

window.onload = function () {
    var div = document.getElementById("info");
    div.innerHTML = "Current orientation is " + window.orientation;
};
window.addEventListener("orientationchange", function () {
    div.innerHTML = "Current orientation is " + window.orientation;
});
deviceorientationevent事件

MozOrientation事件,该事件已被移除,应该使用DeviceOrientationEvent事件
Warning: This experimental API was removed in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3), when support for the standard DeviceOrientationEvent was implemented. You should use that API instead.

但是DeviceOrientationEvent事件仍然是实验性的事件,目前有部分浏览器暂时不支持。

该事件的意图是告诉开发者设备在空间中朝向哪儿,设备在三维空间中是靠x、y、z轴来定位的。

事件对象包含:

alpha:围绕z轴旋转,y轴的度数差;0~360的值;

beta:围绕x轴旋转,z轴的度数差;-180~180的值;

gamma:围绕y轴旋转,z轴的度数差;-90~90的值;

absolute:表示设备是否返回一个绝对值;

compassCalibrated:表示设备的指南针是否校准过;

如:

window.addEventListener("deviceorientation", function () { var info = document.getElementById("info"); info.style.webkitTransform = "rotate(" + -Math.round(event.alpha) + "deg)"; });
devicemotion事件

该事件是要告诉开发者设备什么时候移动,如通过该事件检测设备是否在往下掉,是否被走着的人拿在手里等等。

属性:

acceleration:包含x、y、z属性的对象,不考虑重力的情况下,每个方向的加速度;

accelerationIncludingGravity:包含x、y、z属性的对象,在考虑z自然重力加速度的情况下,每个方向上的加速度;

interval:毫秒值,必须在另一个devicemotion事件触发前传入;

rotationRate:包含表示方向的alpha、beta和gamma属性的对象;

如果读取不到值,会返回null,所以应该先检测它们的值是否为null:

window.addEventListener("devicemotion", function () {
    if (event.rotationRate !== null) {
        // statement
    }
});
触摸与手势事件 触摸事件 兼容DOM的触摸事件

touchstart:触摸屏幕时触发;

touchmove:滑动时触发,调用preventDefault()函数可阻止滚动;

touchend:当手指从屏幕上移开时触发;

touchcancel:当系统停止跟踪触摸时触发;

上面的事件都会冒泡,都可以取消。每个触摸事件的event对象都提供了在鼠标事件中常见的属性。

跟踪触摸的事件

touches:表示当前跟踪的触摸操作的Touch对象的数组;

targetTouches:特定于事件目标的Touch对象的数组;

changedTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组;

每个Touch对象包含的属性:

clientX:视口中的x坐标;

clientY:;

identifier:标识触摸的唯一ID;

pageX:触摸目标在页面中的x坐标;

pageY:;

screenX:触摸目标在屏幕中的x坐标;

screenY:;

target:触摸DOM节点目标;

如:

function handleTouchEvent () {
    if (event.touches.length == 1) {
        var output = document.getElementById("output");
        switch (event.type) {
            case "touchstart":
                output.innerHTML = "Touch started (" + event.touches[0].clientX + "," + event.touches[0].clientY + ")";
                break;
            case "touchmove":
                event.preventDefault();
                output.innerHTML = "Touch moved (" + event.changedTouches[0].clientX + "," + event.changedTouches[0].clientY + ")";
                break;
            case "touchend":
                output.innerHTML = "Touch ended (" + event.changedTouches[0].clientX + "," + event.changedTouches[0].clientY + ")";
                break;
        }
    }
}
window.addEventListener("touchstart", handleTouchEvent);
window.addEventListener("touchmove", handleTouchEvent);
window.addEventListener("touchend", handleTouchEvent);

暂时不清楚为什么touchend无反应。

手势事件

gesturestart:当一个手指已经按在屏幕上而另一个手指又触摸屏幕时触发;

gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发;

gestureend:当任何一个手指从屏幕上面移开时触发;

其中event还包括除鼠标事件的属性之外另外两个属性:rotationscale:其中rotation属性表示旋转的角度,从0开始,负值表示逆时针旋转,正值表示顺时针旋转;scale属性从1开始,随着距离拉大而增加,随着距离缩小而减小:

var output = document.getElementById("output");
document.addEventListener("gesturestart", function () {
    output.innerHTML = "rotation: " + event.rotation + ";" + "scale: " + event.scale;
});
document.addEventListener("gestureend", function () {
    output.innerHTML = "rotation: " + event.rotation + ";" + "scale: " + event.scale;
});
document.addEventListener("gesturechange", function () {
    event.preventDefault();
    output.innerHTML = "rotation: " + event.rotation + ";" + "scale: " + event.scale;
});

写成:

function handleGestureEvent() {
    var output = document.getElementById("output");
    switch (event.type) {
        case "gesturestart":
            output.innerHTML = "rotation: " + event.rotation + ";" + "scale: " + event.scale;
            break;
        case "gestureend":
            output.innerHTML = "rotation: " + event.rotation + ";" + "scale: " + event.scale;
            break;
        case "gesturechange":
            event.preventDefault();
            output.innerHTML = "rotation: " + event.rotation + ";" + "scale: " + event.scale;
            break;
    }
}
document.addEventListener("gesturestart", handleGestureEvent);
document.addEventListener("gestureend", handleGestureEvent);
document.addEventListener("gesturechange", handleGestureEvent);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91605.html

相关文章

  • 高程3总结#第13章事件

    摘要:所有节点中都包含这两个方法,并且它们都接受个参数要处理的事件名,作为事件处理程序的函数和一个布尔值。和支持这个事件。 事件 事件流 事件流描述的是从页面中接收事件的顺序 事件冒泡 IE的事件流叫做事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点showImg(https://segmentfault.com/img/bVbg5...

    RyanQ 评论0 收藏0
  • JavaScript高级程序设计(第3版)》——事件(十三)

    摘要:事件捕获团队提出的,与事件冒泡相反。事件处理程序事件用户或浏览器自身执行的某种动作。事件处理程序响应某个事件的函数。事件委托目的解决事件处理程序过多问题。流程创建事件对象初始化事件对象触发事件 事件是将JavaScript与网页联系在一起的主要方式。 事件流 事件流:从页面中接收到事件的顺序。 事件冒泡 IE的事件流叫做事件冒泡:事件开始时由最具体 的元素(文档中嵌套层次最深的那个节点...

    DandJ 评论0 收藏0
  • js基础知识笔记

    摘要:常见内存泄漏情形全局变量被忘记的或者闭包引用闭包概念有权访问另一个函数作用域的变量的函数。会话存储刷新页面依旧存在,与在持久上不同外,其余一致。请求向指定的资源提交被处理的数据,数据量和类型没限制,不主动缓存,页面刷新数据会被重新提交。 defer 脚本延迟执行,适用于外部脚本文件async 立即下载,不保证顺序(建议不修改DOM,避免重绘) CDN加速 (Content De...

    李文鹏 评论0 收藏0
  • JavaScript 事件——“事件类型“UI事件注意要点

    摘要:事件这个事件在文档被完全卸载后触发。事件当浏览器窗口被调整到一个新的高度或宽度,就会触发该事件。事件该事件虽然在对象上发生的,但实际表示的是页面中响应元素的变化。事件关于等事件以后再讨论事件关于等事件以后再讨论事件关于等事件以后再讨论 DOM3级事件规定了一下几类事件 UI事件,当用户与页面上的元素交互时除法; 焦点事件,元素获得或失去焦点; 鼠标事件,通过鼠标在页面上执行操作; 滚...

    sushi 评论0 收藏0
  • JavaScript 事件——“模拟事件注意要点

    DOM中的事件模拟 三个步骤: 首先通过document.createEvent()方法创建event对象,接收一个参数,即表示要创建的事件类型的字符串: UIEvents(DOM3中的UIEvent)鼠标和键盘事件; MouseEvents(DOM3中的MouseEvent)鼠标事件; MutationEvents(DOM3中的MutationEvent)变动事件; HTMLEvents(没有...

    BakerJ 评论0 收藏0

发表评论

0条评论

Ethan815

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<