touchstart事件:當(dāng)手指觸摸屏幕時(shí)候觸發(fā),即使已經(jīng)有一個(gè)手指放在屏幕上也會觸發(fā)。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),林甸企業(yè)網(wǎng)站建設(shè),林甸品牌網(wǎng)站建設(shè),網(wǎng)站定制,林甸網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,林甸網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
touchmove事件:當(dāng)手指在屏幕上滑動的時(shí)候連續(xù)地觸發(fā)。在這個(gè)事件發(fā)生期間,調(diào)用preventDefault()事件可以阻止?jié)L動。
touchend事件:當(dāng)手指從屏幕上離開的時(shí)候觸發(fā)。
touchcancel事件:當(dāng)系統(tǒng)停止跟蹤觸摸的時(shí)候觸發(fā)。關(guān)于這個(gè)事件的確切出發(fā)時(shí)間,文檔中并沒有具體說明,咱們只能去猜測了。
//選中條件?x1=橫軸位置?y1=縱軸位置?
var?x1,?x2,?y1,?y2;
$(document).on("touchstart",".smallbox",?function?(e)?{
//?e.preventDefault();
var?obj?=?$(this);
var?position?=?$(this).offset();
x1?=?position.left;
x2?=?position.left?+?obj.width();
y1?=?position.top;
y2?=?position.top?+?obj.height();//觸摸時(shí)將變量賦值
}).on("touchend",?".smallbox",?function?(e)?{
var?pos?=?e.originalEvent.changedTouches[0];
if?(pos.pageX?=?x1
pos.pageX?=?x2
pos.pageY?=?y1
pos.pageY?=?y2)?{//判斷當(dāng)前的點(diǎn)擊位置是否在有效范圍內(nèi)
var?obj?=?$(this);
if?(obj.hasClass("active"))?{
obj.removeClass("active");
}?else?{
obj.addClass("active");
}
}
e.preventDefault();
}).on("click",?".smallbox",?function?()?{
var?obj?=?$(this);
if?(obj.hasClass("active"))?{
obj.removeClass("active");
}?else?{
obj.addClass("active");
}
});
實(shí)際上,拿canvas2D繪制,只是把image渲染到 canvas(畫布上).而實(shí)際的事件,就不能像標(biāo)簽?zāi)敲刺幚?應(yīng)該對canvas的事件做處理.
實(shí)現(xiàn)邏輯是這樣:
1,添加事件監(jiān)聽,比如說,鼠標(biāo)按下 做什么,滑動 做什么,彈起做什么.一般鼠標(biāo)事件都是判斷彈起的位置
2,判斷有效坐標(biāo),在事件中判斷坐標(biāo)位置是否在圖片位置,也就是圖片在canvas的位置.
ex:
//some code...
canvas.width=400;
canvas.height=400;
var context2d = canvas.getContext("2d");
var img =new Image();
img.src="xxx/xxx.png";
img.onload=function(){
context2d.drawImage(img,X,Y,WIDTH,HEIGTH);
//X=0,Y=0,W=50,H=50
canvas.addEventListener("mouseup", keyUp, false);
}
function keyUp(evt){
Event_UpX = evt.offsetX;
Event_UpY = evt.offsetY;
if(Event_UpX=繪制坐標(biāo)XEvent_UpX=圖片寬度){
if(Event_UpY=繪制坐標(biāo)YEvent_UpY=圖片高度){
//do something
}
}
}
touchstart:觸摸開始的時(shí)候觸發(fā)
touchmove:手指在屏幕上滑動的時(shí)候觸發(fā)
touchend:觸摸結(jié)束的時(shí)候觸發(fā)
而每個(gè)觸摸事件都包括了三個(gè)觸摸列表,每個(gè)列表里包含了對應(yīng)的一系列觸摸點(diǎn)(用來實(shí)現(xiàn)多點(diǎn)觸控):
touches:當(dāng)前位于屏幕上的所有手指的列表。
targetTouches:位于當(dāng)前DOM元素上手指的列表。
changedTouches:涉及當(dāng)前事件手指的列表。
每個(gè)觸摸點(diǎn)由包含了如下觸摸信息(常用):
identifier:一個(gè)數(shù)值,唯一標(biāo)識觸摸會話(touch session)中的當(dāng)前手指。一般為從0開始的流水號(android4.1,uc)
target:DOM元素,是動作所針對的目標(biāo)。
一個(gè)觸屏網(wǎng)站到底和傳統(tǒng)的pc端網(wǎng)站有什么區(qū)別呢,交互方式的改變首當(dāng)其沖。例如我們常用的click事件,在觸屏設(shè)備下是如此無力。
手機(jī)上的大部分交互都是通過touch來實(shí)現(xiàn)的,于是,對于觸屏的交互式網(wǎng)站,觸摸事件是相當(dāng)重要的。
Apple在iOS 2.0中引入了觸摸事件API,Android正迎頭趕上這一事實(shí)標(biāo)準(zhǔn),縮小差距。最近一個(gè)W3C工作組正合力制定這一觸摸事件規(guī)范。
規(guī)范
這里我們介紹幾種普及得比較好的觸摸事件,你可以在絕大多數(shù)現(xiàn)代瀏覽器中來測試這一事件(必須是觸屏設(shè)備哦):
touchstart:觸摸開始的時(shí)候觸發(fā)
touchmove:手指在屏幕上滑動的時(shí)候觸發(fā)
touchend:觸摸結(jié)束的時(shí)候觸發(fā)
而每個(gè)觸摸事件都包括了三個(gè)觸摸列表,每個(gè)列表里包含了對應(yīng)的一系列觸摸點(diǎn)(用來實(shí)現(xiàn)多點(diǎn)觸控):
touches:當(dāng)前位于屏幕上的所有手指的列表。
targetTouches:位于當(dāng)前DOM元素上手指的列表。
changedTouches:涉及當(dāng)前事件手指的列表。
每個(gè)觸摸點(diǎn)由包含了如下觸摸信息(常用):
identifier:一個(gè)數(shù)值,唯一標(biāo)識觸摸會話(touch session)中的當(dāng)前手指。一般為從0開始的流水號(android4.1,uc)
target:DOM元素,是動作所針對的目標(biāo)。
pageX/pageX/clientX/clientY/screenX/screenY:一個(gè)數(shù)值,動作在屏幕上發(fā)生的位置(page包含滾動距離,client不包含滾動距離,screen則以屏幕為基準(zhǔn))。
radiusX/radiusY/rotationAngle:畫出大約相當(dāng)于手指形狀的橢圓形,分別為橢圓形的兩個(gè)半徑和旋轉(zhuǎn)角度。初步測試瀏覽器不支持,好在功能不常用,歡迎大家反饋。
有了這些信息,我們就可以依據(jù)這些事件信息為用戶提供不同的反饋了。
下面,我將為大家展示一個(gè)小demo,用touchmove實(shí)現(xiàn)的單指拖動:
/*單指拖動*/
var obj = document.getElementById('id');
obj.addEventListener('touchmove', function(event) {
// 如果這個(gè)元素的位置內(nèi)只有一個(gè)手指的話
if (event.targetTouches.length == 1) {
event.preventDefault();// 阻止瀏覽器默認(rèn)事件,重要
var touch = event.targetTouches[0];
// 把元素放在手指所在的位置
obj.style.left = touch.pageX-50 + 'px';
obj.style.top = touch.pageY-50 + 'px';
}
}, false);
關(guān)于a標(biāo)簽四個(gè)偽類在觸屏設(shè)備中的小技巧:
我們都知道a標(biāo)簽的四個(gè)偽類link,visited,active,hover是專為click事件設(shè)計(jì)的,所以在觸屏網(wǎng)站中盡量不要使用它們。經(jīng)測試大部分也是不可用的。但是這里有一個(gè)關(guān)于hover的小技巧,當(dāng)你點(diǎn)擊過一個(gè)按鈕之后,這個(gè)按鈕就會一直處于hover的狀態(tài),此時(shí)你基于這個(gè)偽類所設(shè)置的css也是起作用的,直到你用手指點(diǎn)擊另外一個(gè)按鈕,hover狀態(tài)就會轉(zhuǎn)移到另一個(gè)按鈕。利用這一點(diǎn),我們可以做出一些小效果。此技巧在大多數(shù)瀏覽器中還是可用的。
理想很豐滿,現(xiàn)實(shí)很骨感!
雖然w3c為多點(diǎn)觸控做好了準(zhǔn)備,遺憾的是鮮有瀏覽器支持多點(diǎn)觸控的特性,尤其是android平臺上的瀏覽器,也就讓上文介紹的手指列表變?yōu)榱丝照劊东@兩個(gè)觸摸點(diǎn)會直接導(dǎo)致觸摸失效!好在ios設(shè)備自帶的safari瀏覽器能夠支持這一特性,讓我們對未來充滿希望。畢竟,我們被鼠標(biāo)的單點(diǎn)操作禁錮了太久,多指操作一個(gè)網(wǎng)站是多么令人興奮!
分享文章:html5touch,html5透傳
本文網(wǎng)址:http://chinadenli.net/article45/dsshpei.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、品牌網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站收錄、自適應(yīng)網(wǎng)站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)