javascript - 禁用 Vanilla-tilt.js 的鼠标移动但保持陀螺仪效果
问题描述
我正在使用插件Vanilla-tilt.js,在桌面上效果很好。在移动设备上,倾斜效果对设备方向的响应非常好,但是当用户点击设备上的某个位置时,它会使倾斜区域向点击的位置猛拉,然后返回到其原始位置。我在 Android 上使用 Chrome,请随时通过上面的链接自行尝试。
我想在移动设备上保留陀螺仪效果,但禁止用户点击影响瓷砖位置。我正在使用内联配置,这是一个示例:
<div data-tilt data-tilt-full-page-listening data-tilt-reset="false">Tilt object goes here</div>
我的第一个想法是下载 vanilla-tilt.js 源代码并对其进行修改,使其仅在屏幕具有一定宽度时才查找鼠标事件。我不介意切换到 jQuery 版本Tilt.js ,如果这样更容易的话。
我构建了一个缩小的代码示例,您可以在此处查看。
解决方案
我刚刚注意到,在“轻拍”的情况下, event.movementX
andevent.movementY
等于 0,所以我相信一个简单的解决方案需要稍微调整onMouseMove
函数,如下所示:
onMouseMove(event) {
if(event.movementX == 0 && event.movementY == 0) return false;
if (this.updateCall !== null) {
cancelAnimationFrame(this.updateCall);
}
this.event = event;
this.updateCall = requestAnimationFrame(this.updateBind);
}
在您的示例中,您正在使用内置的自动初始化。还有更多工作,这需要对已经附加的侦听器进行猴子修补。这是我的做法,作为概念证明:
(function() {
var elements = document.querySelectorAll("[data-tilt]");
elements.forEach(function(item, index){
function onMouseMove(event) {
if(event.movementX == 0 && event.movementY == 0) return false;
if (this.updateCall !== null) {
cancelAnimationFrame(this.updateCall);
}
this.event = event;
this.updateCall = requestAnimationFrame(this.updateBind);
}
var tiltObj = item.vanillaTilt;
tiltObj.elementListener.removeEventListener("mousemove", tiltObj.onMouseMoveBind);
tiltObj.onMouseMoveBind = onMouseMove.bind(tiltObj);
tiltObj.elementListener.addEventListener("mousemove", tiltObj.onMouseMoveBind);
});
})();
可以肯定的是,我使用您的缩小测试用例和vanilla-tilt 主页测试了此修补程序,它似乎有效,但最终解决方案可能会有所不同,具体取决于您的实施。
请在您的移动设备中测试它并告诉我。
推荐阅读
- javascript - 带有角色警报的 IE11 JAWS 可访问性问题
- groovy - 如何跳过有效载荷的第一行 - groovy
- java - 为什么我需要使用瞬态关键字来避免 java.lang.StackOverflowError 使用 Gson 和 SocketChannel 属性?
- augmented-reality - How to place 3d model in arcore with accurate size of 3d model in real life
- java - 如何在java中将字符串转换为日期?
- php - 在 Laravel 6 上使用自定义身份验证
- python - Kivy 中的 3D 图形
- unit-testing - OpenCover 不工作,它总是显示 0% 代码覆盖率
- docker-image - vcredist_x86.exe 无法安装在从 mcr.microsoft.com/windows/servercore:10.0.14393.3506 构建的容器中
- mysql - 需要外键约束的详细信息失败