拖拽旋转相册

简介: 拖拽旋转相册

html部分:

<body>
    <div id="perspective">
      <div 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" />
        <img src="img/7.jpg" />
        <img src="img/8.jpg" />
        <img src="img/9.jpg" />
        <img src="img/10.jpg" />
        <img src="img/11.jpg" />
        <p></p>
      </div>
    </div>
  </body>

css部分:

* {
  margin: 0;
  padding: 0;
}
body {
  background: #000;
  overflow: hidden;
}
#perspective {
  perspective: 800px;
}
#wrap {
  width: 120px;
  /*133:200  4:6  */
  height: 180px;
  margin: 0 auto;
  position: relative;
  /*搭建3D效果必须的两个属性:一个变换风格变3d,一个场景景深800px*/
  transform-style: preserve-3d;
  transform: rotateX(-10deg) rotateY(0deg);
}
#wrap img {
  width: 100%;
  height: 100%;
  position: absolute;
  border-radius: 1px;
  box-shadow: 0 0 8px #f9f;
  transform: rotateY(0deg) translateZ(0px);
  /*倒影:朝向 偏移 遮盖*/
  /*线性渐变(从哪里开始,开始时候的颜色,结束时候的颜色)*/
  -webkit-box-reflect: below 5px -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 40%, 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));
  border-radius: 100%;
  position: absolute;
  left: 50%;
  top: 102%;
  margin-left: -600px;
  margin-top: -600px;
  transform: rotateX(90deg);
}

js部分:

window.onload = function() {
  let oWrap = document.getElementById('wrap');
  let oImg = oWrap.getElementsByTagName('img');
  let oImgLength = oImg.length;
  let Deg = 360 / oImgLength;
  let nowX, nowY, lastX, lastY, minusX = 0,
    minusY = 0;
  let roY = 0,
    roX = -10;
  let timer;
  for (let i = 0; i < oImgLength; i++) {
    oImg[i].style.transform = 'rotateY(' + i * Deg + 'deg) translateZ(350px)';
    oImg[i].style.transition = 'transform 1s ' + (oImgLength - 1 - i) * 0.1 + 's';
  }
  mTop();
  window.onresize = mTop;
  function mTop() {
    let wH = document.documentElement.clientHeight;
    oWrap.style.marginTop = wH / 2 - 180 + 'px';
  }
  // 拖拽:三个事件-按下 移动 抬起
  //按下
  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跟着鼠标动
      let 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;
  }
}

网页效果:

相关文章
|
1月前
鼠标经过图片图片放大效果
鼠标经过图片图片放大效果
32 0
|
7月前
|
小程序 JavaScript
小程序本地相册选择图片或相机拍照底部弹框功能
小程序本地相册选择图片或相机拍照底部弹框功能
64 0
|
1月前
|
索引
【sgPhotoPlayer】自定义组件:图片预览,支持点击放大、缩小、旋转图片
【sgPhotoPlayer】自定义组件:图片预览,支持点击放大、缩小、旋转图片
|
6月前
HTML+CSS制作3D旋转相册
HTML+CSS制作3D旋转相册
|
6月前
|
前端开发
HTML+CSS实现菜单的3D翻转特效
HTML+CSS实现菜单的3D翻转特效
|
Web App开发 移动开发 前端开发
移动端图片操作(二)——预览、旋转、合成
在上一节中已经提到了预览,预览可以通过data: URL格式或URL对象。
移动端图片操作(二)——预览、旋转、合成
|
12月前
|
JavaScript 前端开发 容器
手写图片拖拽、鼠标点位缩放
如题,无关技术背景,什么vue、react自己想用就用,这就是js加一点点css实现,意思就是可以任意迁。
160 0
|
Windows 容器
一款简单的缩放拖拽图片控件
本文介绍一个针对 .NET 桌面应用程序的独立图片缩放拖拽显示控件 [SQPhoto](https://www.nuget.org/packages/SQPhoto/)。
152 0
一款简单的缩放拖拽图片控件
|
JavaScript 前端开发
3D旋转相册+背景音乐
3D旋转相册+背景音乐
3D旋转相册+背景音乐

热门文章

最新文章