移動裝置、手機瀏覽器Javascript滑動事件程式碼
阿新 • • 發佈:2019-01-02
以下經過本人測試成功。
測試平臺:三星S5830I
作業系統:Android 2.3.6
瀏覽器:UC瀏覽器
HTML標準:HTML5
測試了三個事件:touchstart、touchmove 和 touchend,並獲取了觸控時觸點在頁面上的座標,根據座標進行了左右滑動、上下滑動判斷。
程式碼如下:
<!-- HTML5 --> <!DOCTYPE html> <html> <head> <title>TouchEvent測試</title> <meta charset="gbk"> </head> <body> <h2>TouchEvent測試</h2> <br /> <div id="version" style="border:2px solid black;background-color:yellow"></div> <br /> <br /> <br /> <br /> <br /> <br /> <div id="result" style="border:2px solid red; color:red;">未觸發事件!</div> <div id="test" style="border:2px solid red"> <ul> <li id="li1">測試條目1</li> <li id="li2">測試條目2</li> <li id="li3">測試條目3</li> <li id="li4">測試條目4</li> <li id="li5">測試條目5</li> <li id="li6">測試條目6</li> <li id="li7">測試條目7</li> <li id="li8">測試條目8</li> <li id="li9">測試條目9</li> <li id="li10">測試條目10</li> <li id="li11">測試條目11</li> <li id="li12">測試條目12</li> <li id="li13">測試條目13</li> <li id="li14">測試條目14</li> <li id="li15">測試條目15</li> <li id="li16">測試條目16</li> <li id="li17">測試條目17</li> <li id="li18">測試條目18</li> <li id="li19">測試條目19</li> <li id="li20">測試條目20</li> </ul> </div> <script type="text/javascript"> //全域性變數,觸控開始位置 var startX = 0, startY = 0; //touchstart事件 function touchSatrtFunc(evt) { try { //evt.preventDefault(); //阻止觸控時瀏覽器的縮放、滾動條滾動等 var touch = evt.touches[0]; //獲取第一個觸點 var x = Number(touch.pageX); //頁面觸點X座標 var y = Number(touch.pageY); //頁面觸點Y座標 //記錄觸點初始位置 startX = x; startY = y; var text = 'TouchStart事件觸發:(' + x + ', ' + y + ')'; document.getElementById("result").innerHTML = text; } catch (e) { alert('touchSatrtFunc:' + e.message); } } //touchmove事件,這個事件無法獲取座標 function touchMoveFunc(evt) { try { //evt.preventDefault(); //阻止觸控時瀏覽器的縮放、滾動條滾動等 var touch = evt.touches[0]; //獲取第一個觸點 var x = Number(touch.pageX); //頁面觸點X座標 var y = Number(touch.pageY); //頁面觸點Y座標 var text = 'TouchMove事件觸發:(' + x + ', ' + y + ')'; //判斷滑動方向 if (x - startX != 0) { text += '<br/>左右滑動'; } if (y - startY != 0) { text += '<br/>上下滑動'; } document.getElementById("result").innerHTML = text; } catch (e) { alert('touchMoveFunc:' + e.message); } } //touchend事件 function touchEndFunc(evt) { try { //evt.preventDefault(); //阻止觸控時瀏覽器的縮放、滾動條滾動等 var text = 'TouchEnd事件觸發'; document.getElementById("result").innerHTML = text; } catch (e) { alert('touchEndFunc:' + e.message); } } //繫結事件 function bindEvent() { document.addEventListener('touchstart', touchSatrtFunc, false); document.addEventListener('touchmove', touchMoveFunc, false); document.addEventListener('touchend', touchEndFunc, false); } //判斷是否支援觸控事件 function isTouchDevice() { document.getElementById("version").innerHTML = navigator.appVersion; try { document.createEvent("TouchEvent"); alert("支援TouchEvent事件!"); bindEvent(); //繫結事件 } catch (e) { alert("不支援TouchEvent事件!" + e.message); } } window.onload = isTouchDevice; </script> </body> </html>
下面是jQuery Mobile實現上下滑動的方式:
jQuery Mobile左右滑動事件:swipe(水平滑動30px以上時觸發)、swipeLeft(向左滑)、swipeRight(向右滑)
jQuery Mobile垂直滑動事件:scrollstart(上下滾動)、scrollend(滾動停止)
jQuery Mobile觸控點選事件:tap(快速觸碰)、taphold(觸碰並保持750ms以上觸發)
<!DOCTYPE html> <html> <head> <title>Ajax測試</title> <meta charset="gbk"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="jquery-mobile/jquery.mobile-1.2.0.min.css"/> <link rel="stylesheet" href="jquery-mobile/jquery.mobile.structure-1.2.0.min.css"/> <script src="jquery-mobile/jquery-1.8.2.min.js"></script> <script src="jquery-mobile/jquery.mobile-1.2.0.min.js"></script> </head> <body> <div data-role="page" data-theme="b"> <div data-role="header"></div> <div data-role="content"> <script> //scrollstart事件 function scrollstartFunc(evt) { try { var target = $(evt.target); while (target.attr("id") == undefined) { target = target.parent(); } //獲取觸點目標id屬性值 var targetId = target.attr("id"); alert("targetId: " + targetId); } catch (e) { alert('myscrollfunc:' + e.message); } } function myinit() { //繫結上下滑動事件 $("#myul").bind('scrollstart', function () { scrollstartFunc(event); }); } window.onload = myinit; </script> <!-- listview測試 --> <ul id="myul" data-role="listview" data-inset="true"> <li data-role="list-divider">資訊列表</li> <li id="li1" data-role="fieldcontain">資訊1</li> <li id="li2" data-role="fieldcontain">資訊2</li> <li id="li3" data-role="fieldcontain">資訊3</li> <li id="li4" data-role="fieldcontain">資訊4</li> <li id="li5" data-role="fieldcontain">資訊5</li> <li id="li6" data-role="fieldcontain">資訊6</li> <li id="li7" data-role="fieldcontain">資訊7</li> <li id="li8" data-role="fieldcontain">資訊8</li> <li id="li9" data-role="fieldcontain">資訊9</li> <li id="li10" data-role="fieldcontain">資訊10</li> </ul> </div> </body> </html>
歡迎轉載,歡迎批評指正!