jquery+CSS3实现3D拖拽相册效果


Posted in Javascript onJuly 18, 2016

很久之前练习过的一个实践,复习完渐变、圆角、3D变形、拖拽等等来看源码,估计还不会太凌乱(◎?◎)哈哈哈

效果图:

jquery+CSS3实现3D拖拽相册效果

HTML:

<!doctype html>
<html onselectstart="return false;" lang="en"><!-- !important -->
<head>
  <meta charset="UTF-8">
  <title>3D拖拽相册</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
 <!-- html上阻止默认行为onselectstart -->
  <div class="pic">
    <img src="images/1.jpg" />
    <img src="images/2.jpg"/>
    <img src="images/3.jpg" />
    <img src="images/4.jpg" />
    <img src="images/5.jpg" />
    <img src="images/6.jpg" />
    <img src="images/7.jpg" />
    <img src="images/8.jpg" />
    <img src="images/9.jpg" />
    <img src="images/10.jpg" />
    <img src="images/11.jpg" />

    <p></p>
  </div>
  <script type="text/javascript" src="js/jquery.js"></script>
  <script type="text/javascript" src="js/index.js"></script>
</body>
</html>

CSS:

*{margin:0;padding:0;}
body,html{background:#000;}
.pic{
  width:120px;height:180px;
  margin:150px auto 0;
  border:1px solid red;
  position:relative;
  transform-style:preserve-3d;/*设置3D环境*/
  /*perspective:800px;不用这个*/
  transform:perspective(800px) rotateX(-10deg) rotateY(0deg);
}
.pic img{
  position:absolute;
  height:100%;width:100%;
  border-radius:5px;
  box-shadow:0 0 10px #fff;
  /*背景渐变效果!important*/
  -webkit-box-reflect:below 10px
  -webkit-linear-gradient(top,rgba(0,0,0,0) 80%,rgba(0,0,0,1) 100%);
}
.pic p{
  width:1200px;height:1200px;
  /*放射性背景渐变*/
  background:
  -webkit-radial-gradient(center center,400px 400px,rgba(255,255,255,0.2),rgba(0,0,0,0));
  position:absolute;
  left:50%;top:100%;
  /*往回移动位置*/
  margin-left:-600px;
  margin-top:-600px;
  transform:rotateX(90deg);
  border-radius:600px;
}

 JQ:

$(function(){
  var imgL=$("div.pic img").size();//获取到图片总数
  // alert(imgL);
  var deg=360/imgL;//每张图片需要旋转的角度
  var roY=0,roX=0;//定义父盒子旋转初始值
  var xN,yN;//定义当前点击处的坐标和前一坐标的距离差
  var play;//定义定时器
  $("div.pic img").each(function(i){
    //设置每张图片 的3D位置
    $(this).css({"transform":"rotateY("+i*deg+"deg) translateZ(350px)"});
    $(this).attr("ondragstart","return false");//每张图片都禁止拖拽
  });
  $(document).mousedown(function(ev){
    //每次都先清除定时器,防止混乱
    clearInterval(play);
    //获取当前点击处的坐标
    var x_=ev.clientX;
    var y_=ev.clientY;
    $(this).bind("mousemove",function(ev){
      //获取移动后的坐标
      var x=ev.clientX;
      var y=ev.clientY;
      //获取移动后,当前坐标和前一坐标的距离差
      xN=x-x_;
      yN=y-y_;
      //将距离差转变为容器旋转的数值
      roY+=xN*0.2;
      roX-=yN*0.1;
      /*$("body").append("<div style='background:red;width:5px;height:5px;position:absolute;top:"+y+"px;left:"+x+"px;'></div>");
此处为方便看到效果*/
      $("div.pic").css({
        "transform":"perspective(800px) rotateY("+roY+"deg) rotateX("+roX+"deg)"
      });
      //将移动后的点设为前一点存放到x_,y_变量中
      x_=ev.clientX;
      y_=ev.clientY;
    })
  }).mouseup(function(){
    //鼠标抬起时,解绑鼠标移动事件
    $(this).unbind("mousemove");
    //鼠标抬起时候,实现惯性缓冲效果
    play=setInterval(function(){
      //将距离插值慢慢变小,实现惯性缓冲
      xN*=0.95;
      yN*=0.95;
      //向左拖动的时候,当前点与前一点的距离差是负值的,要取绝对值
      //停止惯性
      if(Math.abs(xN)<1&&Math.abs(yN)<1){
        clearInterval(play);
      }
      //将距离差转为旋转角度
      roY+=xN*0.2;
      roX-=yN*0.1;
      $("div.pic").css({
        "transform":"perspective(800px) rotateY("+roY+"deg) rotateX("+roX+"deg)"
      });
    },30);
  })
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用cookies实现的可记忆的样式切换效果代码下载
Dec 24 Javascript
jquery.alert 弹出式复选框实现代码
Jun 15 Javascript
juqery 学习之四 筛选查找
Nov 30 Javascript
关于JS管理作用域的问题
Apr 10 Javascript
通过jquery 获取URL参数并进行转码
Aug 18 Javascript
javascript转换日期字符串为Date日期对象的方法
Feb 13 Javascript
javascript实现回到顶部特效
May 06 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
webpack多入口多出口的实现方法
Aug 17 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 Javascript
javascript利用键盘控制小方块的移动
Apr 20 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 #Javascript
完美实现八种js焦点轮播图(上篇)
Jul 18 #Javascript
jQuery实现根据滚动条位置加载相应内容功能
Jul 18 #Javascript
JS HTML5拖拽上传图片预览
Jul 18 #Javascript
jQuery 操作input中radio的技巧
Jul 18 #Javascript
JS HTML5实现拖拽移动列表效果
Aug 27 #Javascript
浅谈$('div a') 与$('div&gt;a')的区别
Jul 18 #Javascript
You might like
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
js 数组操作代码集锦
2009/04/28 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
jquery延迟对象解析
2016/10/26 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python中字符串对齐方法介绍
2015/05/21 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Python中bisect的用法及示例详解
2020/07/20 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
自主招生自荐信
2013/12/08 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
体育活动总结
2015/02/04 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby
PHP 时间处理类Carbon
2022/05/20 PHP