日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python手机触屏代码_JS移动客户端--触屏滑动事件及js手机拖拽效果

發(fā)布時(shí)間:2023/12/8 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python手机触屏代码_JS移动客户端--触屏滑动事件及js手机拖拽效果 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

移動(dòng)端觸屏滑動(dòng)的效果其實(shí)就是圖片輪播,在PC的頁面上很好實(shí)現(xiàn),綁定click和mouseover等事件來完成。但是在移動(dòng)設(shè)備上,要實(shí)現(xiàn)這種輪播的效果,就需要用到核心的touch事件。處理touch事件能跟蹤到屏幕滑動(dòng)的每根手指。

以下是四種touch事件

touchstart: //手指放到屏幕上時(shí)觸發(fā)

touchmove: //手指在屏幕上滑動(dòng)式觸發(fā)

touchend: //手指離開屏幕時(shí)觸發(fā)

touchcancel: //系統(tǒng)取消touch事件的時(shí)候觸發(fā),這個(gè)好像比較少用

每個(gè)觸摸事件被觸發(fā)后,會(huì)生成一個(gè)event對(duì)象,event對(duì)象里額外包括以下三個(gè)觸摸列表

touches: //當(dāng)前屏幕上所有手指的列表

targetTouches: //當(dāng)前dom元素上手指的列表,盡量使用這個(gè)代替touches

changedTouches: //涉及當(dāng)前事件的手指的列表,盡量使用這個(gè)代替touches

這些列表里的每次觸摸由touch對(duì)象組成,touch對(duì)象里包含著觸摸信息,主要屬性如下:

clientX / clientY: //觸摸點(diǎn)相對(duì)瀏覽器窗口的位置

pageX / pageY: //觸摸點(diǎn)相對(duì)于頁面的位置

screenX / screenY: //觸摸點(diǎn)相對(duì)于屏幕的位置

identifier: //touch對(duì)象的ID

target: //當(dāng)前的DOM元素

注意:

手指在滑動(dòng)整個(gè)屏幕時(shí),會(huì)影響瀏覽器的行為,比如滾動(dòng)和縮放。所以在調(diào)用touch事件時(shí),要注意禁止縮放和滾動(dòng)。

1.禁止縮放

通過meta元標(biāo)簽來設(shè)置。

2.禁止?jié)L動(dòng)

preventDefault是阻止默認(rèn)行為,touch事件的默認(rèn)行為就是滾動(dòng)。

event.preventDefault();

案例:

下面給出一個(gè)案例,需在移動(dòng)設(shè)備上才能看出效果。

1.定義touchstart的事件處理函數(shù),并綁定事件:

if(!!self.touch) self.slider.addEventListener('touchstart',self.events,false);

//定義touchstart的事件處理函數(shù)

start:function(event){

var touch = event.targetTouches[0]; //touches數(shù)組對(duì)象獲得屏幕上所有的touch,取第一個(gè)touch

startPos = {x:touch.pageX,y:touch.pageY,time:+new Date}; //取第一個(gè)touch的坐標(biāo)值

isScrolling = 0; //這個(gè)參數(shù)判斷是垂直滾動(dòng)還是水平滾動(dòng)

this.slider.addEventListener('touchmove',this,false);

this.slider.addEventListener('touchend',this,false);

},

觸發(fā)touchstart事件后,會(huì)產(chǎn)生一個(gè)event對(duì)象,event對(duì)象里包括觸摸列表,獲得屏幕上的第一個(gè)touch,并記下其pageX,pageY的坐標(biāo)。定義一個(gè)變量標(biāo)記滾動(dòng)的方向。此時(shí)綁定touchmove,touchend事件。

2.定義手指在屏幕上移動(dòng)的事件,定義touchmove函數(shù)。

//移動(dòng)

move:function(event){

//當(dāng)屏幕有多個(gè)touch或者頁面被縮放過,就不執(zhí)行move操作

if(event.targetTouches.length > 1 || event.scale && event.scale !== 1) return;

var touch = event.targetTouches[0];

endPos = {x:touch.pageX - startPos.x,y:touch.pageY - startPos.y};

isScrolling = Math.abs(endPos.x) < Math.abs(endPos.y) ? 1:0; //isScrolling為1時(shí),表示縱向滑動(dòng),0為橫向滑動(dòng)

if(isScrolling === 0){

event.preventDefault(); //阻止觸摸事件的默認(rèn)行為,即阻止?jié)L屏

this.slider.className = 'cnt';

this.slider.style.left = -this.index*600 + endPos.x + 'px';

}

},

同樣首先阻止頁面的滾屏行為,touchmove觸發(fā)后,會(huì)生成一個(gè)event對(duì)象,在event對(duì)象中獲取touches觸屏列表,取得第一個(gè)touch,并記下pageX,pageY的坐標(biāo),算出差值,得出手指滑動(dòng)的偏移量,使當(dāng)前DOM元素滑動(dòng)。

3.定義手指從屏幕上拿起的事件,定義touchend函數(shù)。

//滑動(dòng)釋放

end:function(event){

var duration = +new Date - startPos.time; //滑動(dòng)的持續(xù)時(shí)間

if(isScrolling === 0){ //當(dāng)為水平滾動(dòng)時(shí)

this.icon[this.index].className = '';

if(Number(duration) > 10){

//判斷是左移還是右移,當(dāng)偏移量大于10時(shí)執(zhí)行

if(endPos.x > 10){

if(this.index !== 0) this.index -= 1;

}else if(endPos.x < -10){

if(this.index !== this.icon.length-1) this.index += 1;

}

}

this.icon[this.index].className = 'curr';

this.slider.className = 'cnt f-anim';

this.slider.style.left = -this.index*600 + 'px';

}

//解綁事件

this.slider.removeEventListener('touchmove',this,false);

this.slider.removeEventListener('touchend',this,false);

},

手指離開屏幕后,所執(zhí)行的函數(shù)。這里先判斷手指停留屏幕上的時(shí)間,如果時(shí)間太短,則不執(zhí)行該函數(shù)。再判斷手指是左滑動(dòng)還是右滑動(dòng),分別執(zhí)行不同的操作。最后很重要的一點(diǎn)是移除touchmove,touchend綁定事件。

代碼事例1:

.div{text-align: center;font-size:30px;}

123456

function getcolor(){

var color_arr = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];

function suiji(){

return Math.floor(Math.random()*16);

}

var colorSTR ="#"+color_arr[suiji()]+color_arr[suiji()]+color_arr[suiji()]+color_arr[suiji()]+color_arr[suiji()]+color_arr[suiji()];

return colorSTR;

}

var divd = $(".div");

divd.each(function(index){

$(this).on('touchstart', function(evt) {

var e = event || evt;

e.preventDefault();//阻止其他事件

//要做的事情

}).on('touchmove', function(evt) {

var e = event || evt;

e.preventDefault();//阻止其他事件

// 如果這個(gè)元素的位置內(nèi)只有一個(gè)手指的話

//console.log(e.targetTouches)

//console.log(event.targetTouches[0].clientX+"/"+event.targetTouches[0].clientY+"/"+event.targetTouches[0].pageX+"/"+event.targetTouches[0].pageY)

if (e.targetTouches.length == 1) {

var touch = e.targetTouches[0]; // 把元素放在手指所在的位置

$(this).css("left",(touch.pageX- parseInt($(this).width())/2 + 'px'));

$(this).css("top",(touch.pageY- parseInt($(this).height())/2 + 'px'));

$(this).css("background", getcolor());

}

}).on('touchend', function(evt) {

var e = event || evt;

e.preventDefault();//阻止其他事件

$(this).css("background",getcolor());

})

});

效果圖1(這些色塊都可以隨意拖動(dòng)):

代碼事例2:

移動(dòng)端觸摸滑動(dòng)

*{margin:0;padding:0;}

li{list-style:none;}

.m-slider{width:600px;margin:50px 20px;overflow:hidden;}

.m-slider .cnt{position:relative;left:0;width:3000px;}

.m-slider .cnt li{float:left;width:600px;}

.m-slider .cnt img{display:block;width:100%;height:450px;}

.m-slider .cnt p{margin:20px 0;}

.m-slider .icons{text-align:center;color:#000;}

.m-slider .icons span{margin:0 5px;}

.m-slider .icons .curr{color:red;}

.f-anim{-webkit-transition:left .2s linear;}

  • 20140813鏡面的世界,終究只是倒影。看得到你的身影,卻觸摸不到你的未來

  • 20140812錫林浩特前往東烏旗S101必經(jīng)之處,一條極美的鐵路。鐵路下面是個(gè)小型的鹽沼,淡淡的有了一絲天空之境的感覺。可惜在此玩了一個(gè)小時(shí)也沒有看見一列火車經(jīng)過,只好繼續(xù)趕往東烏旗。

  • 20140811水的顏色為什么那么藍(lán),我也納悶,反正自然飽和度和對(duì)比度拉完就是這個(gè)顏色的

  • 海洋星球3重慶天氣熱得我想臥軌自殺

  • 以上這些作品分別來自兩位設(shè)計(jì)師作為觀者,您能否通過設(shè)計(jì)風(fēng)格進(jìn)行區(qū)分

1

2

3

4

5

var slider = {

//判斷設(shè)備是否支持touch事件

touch:('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,

slider:document.getElementById('slider'),

//事件

events:{

index:0, //顯示元素的索引

slider:this.slider, //this為slider對(duì)象

icons:document.getElementById('icons'),

icon:this.icons.getElementsByTagName('span'),

handleEvent:function(event){

var self = this; //this指events對(duì)象

if(event.type == 'touchstart'){

self.start(event);

}else if(event.type == 'touchmove'){

self.move(event);

}else if(event.type == 'touchend'){

self.end(event);

}

},

//滑動(dòng)開始

start:function(event){

var touch = event.targetTouches[0]; //touches數(shù)組對(duì)象獲得屏幕上所有的touch,取第一個(gè)touch

startPos = {x:touch.pageX,y:touch.pageY,time:+new Date}; //取第一個(gè)touch的坐標(biāo)值

isScrolling = 0; //這個(gè)參數(shù)判斷是垂直滾動(dòng)還是水平滾動(dòng)

this.slider.addEventListener('touchmove',this,false);

this.slider.addEventListener('touchend',this,false);

},

//移動(dòng)

move:function(event){

//當(dāng)屏幕有多個(gè)touch或者頁面被縮放過,就不執(zhí)行move操作

if(event.targetTouches.length > 1 || event.scale && event.scale !== 1) return;

var touch = event.targetTouches[0];

endPos = {x:touch.pageX - startPos.x,y:touch.pageY - startPos.y};

isScrolling = Math.abs(endPos.x) < Math.abs(endPos.y) ? 1:0; //isScrolling為1時(shí),表示縱向滑動(dòng),0為橫向滑動(dòng)

if(isScrolling === 0){

event.preventDefault(); //阻止觸摸事件的默認(rèn)行為,即阻止?jié)L屏

this.slider.className = 'cnt';

this.slider.style.left = -this.index*600 + endPos.x + 'px';

}

},

//滑動(dòng)釋放

end:function(event){

var duration = +new Date - startPos.time; //滑動(dòng)的持續(xù)時(shí)間

if(isScrolling === 0){ //當(dāng)為水平滾動(dòng)時(shí)

this.icon[this.index].className = '';

if(Number(duration) > 10){

//判斷是左移還是右移,當(dāng)偏移量大于10時(shí)執(zhí)行

if(endPos.x > 10){

if(this.index !== 0) this.index -= 1;

}else if(endPos.x < -10){

if(this.index !== this.icon.length-1) this.index += 1;

}

}

this.icon[this.index].className = 'curr';

this.slider.className = 'cnt f-anim';

this.slider.style.left = -this.index*600 + 'px';

}

//解綁事件

this.slider.removeEventListener('touchmove',this,false);

this.slider.removeEventListener('touchend',this,false);

}

},

//初始化

init:function(){

var self = this; //this指slider對(duì)象

if(!!self.touch) self.slider.addEventListener('touchstart',self.events,false); //addEventListener第二個(gè)參數(shù)可以傳一個(gè)對(duì)象,會(huì)調(diào)用該對(duì)象的handleEvent屬性

}

};

slider.init();

效果圖2(在手機(jī)上手指滑動(dòng)圖片可以進(jìn)行圖片切換):

總結(jié)

以上是生活随笔為你收集整理的python手机触屏代码_JS移动客户端--触屏滑动事件及js手机拖拽效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。