[JavaScript案例]360度全景照片

案例: 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);
};
相關文章
相關標籤/搜索