javascript 在移动端怎么做到左右触摸事件 ontouchmove吗?求代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 在移动端怎么做到左右触摸事件 ontouchmove吗?求代码相关的知识,希望对你有一定的参考价值。

javascript 在移动端怎么做到左右触摸事件 ontouchmove吗?求代码,比如手指向左滑动这个事件怎么写,求大神 有高分啊!!

ontouchmove 自己是做不到的
给你一个思路吧:
touchstart 触发过程中 记录touches的触点坐标
touchend 触发过程中通过 touches的触点坐标 和前一个坐标进行计算得出移动的方向和距离追问

怎么计算他们的位置出来呢?我想做一个触摸切换图片的一个效果;

追答

var mx=0;

var obj=document.getElementById('目标id');
obj.ontouchstart=function(e)
mx=e.touches[0].pageX


obj.ontouchend=function(e)
if(mx-e.touches[0].pageX>10)

// 右移动 10 个像素以上


else if(mx-e.touches[0].pageX<-10)

// 左移动


else

// 没动




未连接移动设备进行测试,不知道是否正确,只是抛砖引玉而已

追问

很不灵敏的,有出来触动有时候不触动的。
你会做判断一张图片(div)是否显示在窗口吗,然后执行另外的代码、谢谢您了!

追答

因为当前 事件是作用在 obj 上,所以慢,您可以作用在 window 对象上,这样快很多,不过要对 y 轴进行判断, 因为要作用到目标区域才有效吗

很早很早以前做过一个画线的小程序,您可以将其作用普通对象上和window 对象上进行对比,速度差很多

mx=0;my=0;
addTouchListeners();

function addTouchListeners()
if(typeof(window.ontouchstart) === 'undefined') //不支持触屏
return;
;
document.addEventListener('touchstart', function(e)

mx=e.touches[0].pageX,my=e.touches[0].pageY;
context.beginPath();

, false);

document.addEventListener('touchmove', function(e)
//单点触摸
context.strokeStyle = "#df4b26";
context.lineJoin = "round";
context.lineWidth = 5;
context.lineTo(e.touches[0].pageX,e.touches[0].pageY)
context.closePath();
context.stroke();
mx=e.touches[0].pageX,my=e.touches[0].pageY;

, false);
document.addEventListener('touchend', function(e)

, false);


追问

没效果哦,你能用'touchstart','touchmove','touchend'做出一个向左向右触摸的一个事件出来吗,向左触摸弹出一个窗口,向右也弹出一个窗口吧。

追答

var obj=document.getElementById('目标id');
改成 var obj=window;

参考技术A $( "div.box" ).on( "swipeleft", function()..);

jquerymobile 自带swipe事件 原理是mousemove

JavaScript小游戏--2048(移动端)

HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。

  一开始触摸事件touchstart、touchmove和touchend是iOS版Safari浏览器为了向开发人员传达一些信息新添加的事件。因为iOs设备既没有鼠标也没有键盘,所以在为移动Safari浏览器开发交互性网页的时候,PC端的鼠标和键盘事件是不够用的。

  在iPhone 3Gs发布的时候,其自带的移动Safari浏览器就提供了一些与触摸(touch)操作相关的新事件。随后,Android上的浏览器也实现了相同的事件。触摸事件(touch)会在用户手指放在屏幕上面的时候、在屏幕上滑动的时候或者是从屏幕上移开的时候出发。下面具体说明:

 

  touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。

  touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。

  touchend事件:当手指从屏幕上离开的时候触发。

  touchcancel事件:当系统停止跟踪触摸的时候触发。关于这个事件的确切出发时间,文档中并没有具体说明,咱们只能去猜测了。

 

  上面的这些事件都会冒泡,也都可以取消。虽然这些触摸事件没有在DOM规范中定义,但是它们却是以兼容DOM的方式实现的。所以,每个触摸事件的event对象都提供了在鼠标实践中常见的属性:bubbles(起泡事件的类型)、cancelable(是否用 preventDefault() 方法可以取消与事件关联的默认动作)、clientX(返回当事件被触发时,鼠标指针的水平坐标)、clientY(返回当事件触发时,鼠标指针的垂直坐标)、screenX(当某个事件被触发时,鼠标指针的水平坐标)和screenY(返回当某个事件被触发时,鼠标指针的垂直坐标)。

var document_width = window.screen.availWidth;  //屏幕宽度
function prepare_for_mobile() {
    if (document_width < 500) {
        $(‘html‘).css({
            ‘font-size‘: ‘40px‘
        });

    }
}

 

//监听移动设备的触摸开始
document.addEventListener(‘touchstart‘,function (event) {
    startx = event.touches[0].pageX;
    starty = event.touches[0].pageY;
});

 

//监听移动设备的触摸移动
document.addEventListener(‘touchmove‘,function (evnet) {
    event.preventDefault();
});

 

//监听移动设备的触摸结束
document.addEventListener(‘touchend‘,function (event) {
    endx = event.changedTouches[0].pageX;
    endy = event.changedTouches[0].pageY;

    var x = endx - startx;
    var y = endy - starty;

    if(Math.abs(x) < 0.3*document_width && Math.abs(y) < 0.3*document_width){
        return;
    }

    if ($(‘#score‘).text == success_string) {
        new_game();
        return;
    }

    //x
    if(Math.abs(x) > Math.abs(y)){
        if(x > 0){
            //向右移动
            if (move_right()){
                setTimeout(‘generate_one_number()‘,210);
                setTimeout(‘is_gameover()‘,300);
            }
        } else {
            //向左移动
            if (move_left()){
                setTimeout(‘generate_one_number()‘,210);
                setTimeout(‘is_gameover()‘,300);
            }
        }
    } else if(Math.abs(x) < Math.abs(y)) { //y
        if (y < 0){
            //向上移动
            if (move_up()){
                setTimeout(‘generate_one_number()‘,210);
                setTimeout(‘is_gameover()‘,300);
            }

        } else {  //向下移动
            if (move_down()){
                setTimeout(‘generate_one_number()‘,210);
                setTimeout(‘is_gameover()‘,300);
            }
        }
    }

})

 

以上是关于javascript 在移动端怎么做到左右触摸事件 ontouchmove吗?求代码的主要内容,如果未能解决你的问题,请参考以下文章

js移动端左右滑动事件

移动端------移动事件对象

JavaScript小游戏--2048(移动端)

javascript--------------移动端事件-------------劉

H5移动端触摸事件:touchstarttouchendtouchmove

移动端触摸相关事件touchtapswipe