本文實(shí)例講述了js實(shí)現(xiàn)滑動(dòng)觸屏事件監(jiān)聽(tīng)的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
function span_move_fun(){ var span = document.getElementById("move_k"); var span_left = $(span).offset().left; var span_top = $(span).offset().top; var start_left = $(span).offset().left; var start_top = $(span).offset().top; span.addEventListener('touchstart', function(event) { event.preventDefault(); if (event.targetTouches.length == 1) {   var touch = event.targetTouches[0];   span.style.position = "absolute"; span_top = $(this).offset().top; span_left = $(this).offset().left; start_top = touch.pageY start_left = touch.pageX   var left = parseFloat(touch.pageX - start_left + span_left-30);   var top = parseFloat(touch.pageY - start_top + span_top-73); span.style.left = String(left) + 'px'; span.style.top = String(top) + 'px';   }  });  span.addEventListener('touchmove', function(event) { event.preventDefault(); if (event.targetTouches.length == 1) { var touch = event.targetTouches[0]; span.style.position = "absolute"; var left = parseFloat(touch.pageX - start_left + span_left-30);   var top = parseFloat(touch.pageY - start_top + span_top-73); span.style.left = String(left) + 'px'; span.style.top = String(top) + 'px'; } });  span.addEventListener('touchend', function(event) {  var touch = event.changedTouches[0];  if(parseFloat(touch.pageX - start_left + span_left-30) <= -5 || parseFloat(touch.pageX - start_left + span_left-30) >= 620 || parseFloat(touch.pageY - start_top + span_top-73) <= -38 || parseFloat(touch.pageY - start_top + span_top-73) >= 587){  span.style.left = String(span_left-30) + 'px'; span.style.top = String(span_top-73) + 'px';  } event.stopPropagation(); });}js的左右滑動(dòng)觸屏事件,主要有三個(gè)事件:touchstart,touchmove,touchend。這三個(gè)事件最重要的屬性是 pageX和 pageY,表示X,Y坐標(biāo)。
touchstart在觸摸開(kāi)始時(shí)觸發(fā)事件
touchend在觸摸結(jié)束時(shí)觸發(fā)事件
touchmove這個(gè)事件比較奇怪,按道理在觸摸到過(guò)程中不斷激發(fā)這個(gè)事件才對(duì),但是在我的 Android 1.5 中,在 touchstart 激發(fā)后激發(fā)一次,然后剩余的都和 touchend 差不多同時(shí)激發(fā)。
這三個(gè)事件都都有一個(gè) timeStamp 的屬性,查看 timeStamp 屬性,可以看到順序是 touchstart -> touchmove ->touchmove -> … -> touchmove ->touchend。
下面是一段代碼實(shí)例:
document.getElementsByTagName_r('body')[0].addEventListener('touchstart',function(e){  nStartY = e.targetTouches[0].pageY;  nStartX = e.targetTouches[0].pageX;});document.getElementsByTagName_r('body')[0].addEventListener('touchend',function(e){  nChangY = e.changedTouches[0].pageY;  nChangX = e.changedTouches[0].pageX;});PS:
1. touch事件跟click事件是不會(huì)被同時(shí)觸發(fā)的。現(xiàn)在的移動(dòng)設(shè)備做的比較好,已經(jīng)把這個(gè)問(wèn)題完美的避免掉了。
2. 注意觸摸的開(kāi)始和結(jié)束位置的位移大小。如果位移小過(guò)小應(yīng)該不做任何動(dòng)作。
PS:這里再為大家提供一個(gè)關(guān)于JS事件的在線工具,歸納總結(jié)了JS常用的事件類(lèi)型與函數(shù)功能:
javascript事件與功能說(shuō)明大全:
http://tools.VeVB.COm/table/javascript_event
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注