js實(shí)現(xiàn)滑動觸屏事件監(jiān)聽的方法
本文實(shí)例講述了js實(shí)現(xiàn)滑動觸屏事件監(jiān)聽的方法。分享給大家供大家參考。具體實(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的左右滑動觸屏事件,主要有三個事件:touchstart,touchmove,touchend。這三個事件最重要的屬性是 pageX和 pageY,表示X,Y坐標(biāo)。
touchstart在觸摸開始時觸發(fā)事件
touchend在觸摸結(jié)束時觸發(fā)事件
touchmove這個事件比較奇怪,按道理在觸摸到過程中不斷激發(fā)這個事件才對,但是在我的 Android 1.5 中,在 touchstart 激發(fā)后激發(fā)一次,然后剩余的都和 touchend 差不多同時激發(fā)。
這三個事件都都有一個 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事件是不會被同時觸發(fā)的。現(xiàn)在的移動設(shè)備做的比較好,已經(jīng)把這個問題完美的避免掉了。
2. 注意觸摸的開始和結(jié)束位置的位移大小。如果位移小過小應(yīng)該不做任何動作。
PS:這里再為大家提供一個關(guān)于JS事件的在線工具,歸納總結(jié)了JS常用的事件類型與函數(shù)功能:
javascript事件與功能說明大全:
http://tools.jb51.net/table/javascript_event
希望本文所述對大家的javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
基于JavaScript實(shí)現(xiàn)新增內(nèi)容滾動播放效果附完整代碼
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)新增內(nèi)容滾動播放效果,效果非常棒,實(shí)現(xiàn)代碼簡單易懂,需要的朋友可以參考下2017-08-08
深入理解JavaScript系列(46):代碼復(fù)用模式(推薦篇)詳解
這篇文章主要介紹了深入理解JavaScript系列(46):代碼復(fù)用模式(推薦篇)詳解,本文講解了原型繼承、復(fù)制所有屬性進(jìn)行繼承、混合(mix-in)、借用方法等模式,需要的朋友可以參考下2015-03-03
javascript 動態(tài)創(chuàng)建表格
這篇文章主要介紹了javascript 動態(tài)創(chuàng)建表格,需要的朋友可以參考下2015-01-01
JavaScript編寫帶旋轉(zhuǎn)+線條干擾的驗(yàn)證碼腳本實(shí)例
除了普通的可點(diǎn)擊更換的四位驗(yàn)證碼實(shí)現(xiàn),我們這里還展示了更進(jìn)一步的JavaScript編寫帶旋轉(zhuǎn)+線條干擾的驗(yàn)證碼腳本實(shí)例,需要的朋友可以參考下2016-05-05
Bootstrap柵格系統(tǒng)簡單實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Boostrap柵格系統(tǒng)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
JS實(shí)現(xiàn)在Repeater控件中創(chuàng)建可隱藏區(qū)域的代碼
在WEB應(yīng)用中,如何才能使應(yīng)用高效率呢?如何才能吸引用戶呢?這的確是個大學(xué)問,頁面的內(nèi)容,色搭配等都十分重要。但不可忽視的是,多數(shù)情況下,對于數(shù)據(jù)的呈現(xiàn)方式也是十分重要的。2010-09-09
微信小程序發(fā)送短信驗(yàn)證碼完整實(shí)例
這篇文章主要介紹了微信小程序發(fā)送短信驗(yàn)證碼完整實(shí)例,實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼,帶60秒倒計(jì)時功能,無需服務(wù)器端,非常具有實(shí)用價值,需要的朋友可以參考下2019-01-01

