首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript touchstart根本不工作

Javascript touchstart根本不工作
EN

Stack Overflow用户
提问于 2016-11-22 16:03:15
回答 1查看 13.6K关注 0票数 11

我试图在我的代码中做一个滑动动作,但是touchstart没有被初始化。我尝试在stackoverflow中搜索解决方案,但没有找到任何解决方案。我是一个使用js的新手。链接如下:

Sample

代码语言:javascript
复制
window.addEventListener('load', function(){

var box1 = document.querySelector('.nav');
var startx = 0;
var starty = 0;
var dist = 0;
var endx=0;
var endy=0;

box1.addEventListener('touchstart', function(e){
    var touchobj = e.changedTouches[0]; 
    startx = parseInt(touchobj.clientX); 


starty = parseInt(touchobj.clientY); 
    }, false);

box1.addEventListener('touchmove', function(e){
  e.preventDefault();
    var touchobj = e.changedTouches[0]; 
    endx = parseInt(touchobj.clientX);
    endy = parseInt(touchobj.clientY);
let dist = endy - starty;
   window.scrollBy(0, dist);
}, false);

box1.addEventListener('touchend', function(e){
    var touchobj = e.changedTouches[0]; 
   endx = parseInt(touchobj.clientX);
    endy = parseInt(touchobj.clientY);
}, false);


}, false);

document.getElementById("btn").addEventListener("click", function(){
document.getElementById("demo").innerHTML = "Hello World";
});

‘请帮帮忙。此外,如果有任何替代使用触摸来实现卷帘,请务必告知。我不能使用jquery来做同样的事情,因为我必须在reactjs中复制它。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-22 23:21:03

我已经更详细地研究了你的代码。

1)假设您的浏览器处于正确模式,则所有事件都应被触发。您可以通过将控制台日志添加到相应的处理程序来轻松查看。

代码语言:javascript
复制
    box1.addEventListener('touchstart', function(e){
        console.log("event start")
        var touchobj = e.changedTouches[0]; 
        startx = parseInt(touchobj.clientX); 
        starty = parseInt(touchobj.clientY); 
        console.log("event start done", startx,starty)
    }, false);

您应该会在日志中看到这两个条目:

事件开始

事件开始完成95 51

2)现在,在您的代码中不起作用的是touchmove处理程序中的以下行:

代码语言:javascript
复制
window.scrollBy(0, dist);

您的窗口中没有溢出内容,因此没有什么可滚动到的。你的“.nav”块的内容比屏幕宽,它的样式是为了隐藏溢出,它的宽度:100%仅将其调整为窗口宽度,但任何溢出的内容仍被隐藏。

在这一点上,我只能猜测预期的设计,但如果您将window.scrollBy更改为以下代码:

代码语言:javascript
复制
  var el = document.getElementsByClassName("nav")[0];
  el.scrollLeft = el.scrollLeft - dist;

如果事件正在触发,您应该会在菜单中看到一些移动。在这段代码中,我将滚动偏移量直接应用于.nav元素,该元素包含大量内容。

3)我不使用reactjs,所以我不能特别推荐任何库。但通常情况下,自己实现swipe是您通常想要避免的事情。我相信在谷歌上搜索"reactjs swipe“会产生一些值得探索的点击量。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40736607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档