案例: 360度全景照片 鼠標在頁面上滑動時圖片表現的物體會隨着移動方向進行旋轉,從而呈現360度物體旋轉效果javascript
思路: 將全部的圖片都放入指定容器內,經過切換相應的照片隱藏與顯示來實現旋轉效果html
代碼:java
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta id="viewport" name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> <title>Document</title> <script type="text/javascript" src="360.js"></script> </head> <body> <div class="container" id="page750"> <img src="img/1.png"> </div> </body> </html>
html,body{ margin: 0; padding: 0; } .container{ display: flex; } img{ display: block; margin: auto; }
window.onload = function(){ var container = document.getElementById("page750"); /* 一次性將全部的圖片標籤加入 */ var imgCount = 40; var lastStartX = 0; var iSpeed = 0; var timer; var _disX; for(var i = 2; i <= imgCount; i++){ (function(i){ var img = new Image(); var imgNode = document.createElement("img"); img.onload = function(){ imgNode.src = this.src; imgNode.style.display = "none"; container.appendChild(imgNode); }; img.src = "img/"+i+".png";} )(i); } var imgNodes = container.getElementsByTagName("img"); var lastImgNode = container.getElementsByTagName("img")[0]; var startX = 0; function mouseDownHandler(event){ console.log("mouse down"); clearInterval(timer); startX = event.clientX; document.addEventListener("mousemove", mouseMoveHandler); document.addEventListener("mouseup", mouseUpHandler); return false; } function mouseMoveHandler(event){ console.log("mouse move"); disX = event.clientX - startX; move(); iSpeed = _disX - lastStartX; lastStartX = _disX; document.title = _disX; return false; } function mouseUpHandler(event){ console.log("mouse up"); document.removeEventListener("mousemove", mouseMoveHandler); document.removeEventListener("mouseup", mouseUpHandler); document.title = iSpeed; timer = setInterval(function(){ if(iSpeed>0){ iSpeed--; }else{ iSpeed++; } if(iSpeed==0){ clearInterval(timer); } disX += iSpeed; move(); }, 20); } function move(){ _disX = parseInt(disX/20); if(_disX>0){ _disX = disX%imgCount; }else{ _disX = disX - Math.floor(disX/imgCount)*imgCount; } if(lastImgNode != imgNodes[_disX]){ lastImgNode.style.display = "none"; imgNodes[_disX].style.display = "block"; lastImgNode = imgNodes[_disX]; } } document.addEventListener("mousedown", mouseDownHandler); };