小相册

代码如下:

<style>
      *{
         margin: 0;
         padding: 0;
      }
      html,body{
         width: 100%;
         height: 100%;
      }
      body{
         background:#1e1e1f;
         overflow:hidden;
      }
      .box{
         width: 100%;
         height: 100%;
         position: relative;
         transform-style: preserve-3d;
         transform:rotateX(-20deg) rotateY(0deg);
      }
      .box img{
         width: 300px;
         height: 200px;
         position: absolute;
         left: calc(50% - 150px);
         top: calc(50% - 100px);
         border: 5px solid #ffffff;
         user-select: none;
         -webkit-box-reflect:below 10px -webkit-linear-gradient(top,rgba(0,0,0,0) 50%,rgba(0,0,0,0.5) 100%);
      }
      #wrap p{
         width: 1200px;
         height: 1200px;
         background:-webkit-radial-gradient(center center,600px 600px,rgba(244,23,234,0.2),rgba(0,0,0,0));
         position: absolute;
         top:100%;left:50%;
         margin-top: -600px;
         margin-left: -600px;
         border-radius:600px;
         transform:rotateX(90deg);
      }
   </style>
</head>
<body >
   <div class="box" id="wrap">
      <img src="img/1.jpg" />
      <img src="img/2.jpg" />
      <img src="img/3.jpg" />
      <img src="img/4.jpg" />
      <img src="img/5.jpg" />
      <img src="img/6.jpg" />
      <p></P>
   </div>

</body>
<script>
   
   setTimeout(init,100);
   function init(){
      var imgArray = document.getElementsByTagName('img');
        var deg = 360/imgArray.length;//单位度数
        [].forEach.call(imgArray,function(node,index){
            // console.log(index*deg);//每张图片应该旋转的度数
            node.style.transform = "rotateY("+index*deg+"deg)translatez(350px)";//赋予给图片,并撑开350px
            node.style.transition = "1s "+(imgArray.length - index)*0.11+"s";
        });

        var newX,newY,pervX,pervY,minusX,minusY;
        var roY = 0 , roX = -10;
        var oWrap = document.getElementById("wrap");//通过id获取元素
        var timer;
        // 拖拽:三个事件-按下 移动 抬起
        //按下
        document.onmousedown = function(ev){
            ev = ev || window.event;

            //鼠标按下的时候,给前一点坐标赋值,为了避免第一次相减的时候出错
            lastX = ev.clientX;
            lastY = ev.clientY;

            //移动
            this.onmousemove = function(ev){
                ev = ev || window.event;

                clearInterval( timer );

                nowX = ev.clientX; // clientX 鼠标距离页面左边的距离
                nowY = ev.clientY; // clientY ………………………………顶部………………

                //当前坐标和前一点坐标差值
                minusX = nowX - lastX;
                minusY = nowY - lastY;

                //更新wrap的旋转角度,拖拽越快-> minus变化大 -> roY变化大 -> 旋转快
                roY += minusX*0.2; // roY = roY + minusX*0.2;
                roX -= minusY*0.1;

                oWrap.style.transform = 'rotateX('+ roX +'deg) rotateY('+ roY +'deg)';

                /*
                //生成div,让div跟着鼠标动
                var oDiv = document.createElement('div');
                oDiv.style.cssText = 'width:5px;height:5px;background:red;position:fixed;left:'+nowX+'px;top:'+nowY+'px';
                this.body.appendChild(oDiv);
                */

                //前一点的坐标
                lastX = nowX;
                lastY = nowY;

            }
            //抬起
            this.onmouseup = function(){
                this.onmousemove = null;
                timer = setInterval(function(){
                    minusX *= 0.95;
                    minusY *= 0.95;
                    roY += minusX*0.2; // roY = roY + minusX*0.2;
                    roX -= minusY*0.1;
                    oWrap.style.transform = 'rotateX('+ roX +'deg) rotateY('+ roY +'deg)';

                    if ( Math.abs(minusX)<0.1 && Math.abs( minusY )<0.1 )
                    {
                        clearInterval( timer );
                    }
                    console.log( minusX );
                },13);
            }
            return false;
        }
   };


</script>

 

posted @ 2020-11-23 21:03  liuun  阅读(90)  评论(0编辑  收藏  举报