1,移動端的常見開發方式:html
touches:當前位於屏幕上的全部手指的列表。android
targetTouches:位於當前DOM元素上手指的列表。瀏覽器
changedTouches:涉及當前事件手指的列表。安全
每一個觸摸點由包含了以下觸摸信息(經常使用):session
identifier:一個數值,惟一標識觸摸會話(touch session)中的當前手指。通常爲從0開始的流水號(android4.1,uc)iphone
target:DOM元素,是動做所針對的目標。ide
pageX
/pageX
/clientX
/clientY/screenX/screenY
:一個數值,動做在屏幕上發生的位置(page包含滾動距離,client不包含滾動距離,screen則以屏幕爲基準)。 佈局
radiusX
/radiusY/
rotationAngle:畫出大約至關於手指形狀的橢圓形,分別爲橢圓形的兩個半徑和旋轉角度。初步測試瀏覽器不支持,好在功能不經常使用.測試
首先爲了防止事件觸發默認行爲,咱們須要去禁止,安全的禁止方法:字體
// 判斷默認行爲是否能夠被禁用
if (e.cancelable) { // 判斷默認行爲是否已經被禁用
if (!e.defaultPrevented) { e.preventDefault(); } }
單指拖動:
/*單指拖動*/
var obj = document.getElementById('id'); obj.addEventListener('touchmove', function(event) { // 若是這個元素的位置內只有一個手指的話
if (event.targetTouches.length == 1) { event.preventDefault();// 阻止瀏覽器默認事件,重要
var touch = event.targetTouches[0]; // 把元素放在手指所在的位置
obj.style.left = touch.pageX-50 + 'px'; obj.style.top = touch.pageY-50 + 'px'; } }, false);
四個方向滑動:
<script>var d1 = document.getElementById("d1"); var startX; var startY; var endX; var endY; document.addEventListener("touchstart",function(event){ var event = event || window.event; startX = event.touches[0].pageX; startY = event.touches[0].pageY; // console.log('按下')
}) document.addEventListener("touchend",function(event){ var event = event || window.event; endX = event.changedTouches[0].pageX; endY = event.changedTouches[0].pageY; var X = endX - startX; var Y = endY - startY; var absX = Math.abs(X) > Math.abs(Y); var absY = Math.abs(Y) > Math.abs(X); if(X > 0 && absX){ console.log('右劃') }else if(X < 0 && absX){ console.log('左劃') }else if(Y > 0 && absY){ console.log('下劃') }else if(Y < 0 && absY){ console.log('上劃') } // console.log("擡起")
}) document.addEventListener("touchmove",function(){ // console.log('移動')
}) </script>
jq寫法demo:
$("body").on("touchstart", function(e) { e.preventDefault(); startX = e.originalEvent.changedTouches[0].pageX, startY = e.originalEvent.changedTouches[0].pageY; }); $("body").on("touchmove", function(e) { e.preventDefault(); moveEndX = e.originalEvent.changedTouches[0].pageX, moveEndY = e.originalEvent.changedTouches[0].pageY, X = moveEndX - startX, Y = moveEndY - startY; if ( X > 0 ) { alert('向左滑動'); } });
3,媒體查詢:
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta charset="UTF-8">
<title>移動端佈局</title>
<style>
/*目前手機屏幕最小的爲320px,IP5的*/ html{
/*font-size: 62.5%;*/ /*瀏覽器的默認字體大小是16px,62.5就是10px,方便計算*/ font-size: 100px;
} @media screen and (max-width: 319px){ html{ display: none;
} } @media screen and (min-width: 320px) and (max-width: 330px){ html{ font-size: 110px;
} } @media screen and (min-width: 331px) and (max-width: 340px){ html{ font-size: 120px;
} } /*想寫的更好看,就把媒體查詢寫的更細膩便可*/
</style>
</head>
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<script> (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 100 * (clientWidth / 320) + 'px';
//根據psd圖的尺寸修改fontsize,psd寬度爲320px時docEl.style.fontSize =100 * (clientWidth / 320) + 'px';
//根據psd圖的尺寸修改fontsize,psd寬度爲640px時docEl.style.fontSize =50* (clientWidth / 320) + 'px';
//width增大就要縮小對應比例的fontsize
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
</script>