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 相关文章推荐
JavaScript Event学习第五章 高级事件注册模型
Feb 07 Javascript
js 小贴士一星期合集
Apr 07 Javascript
给ListBox添加双击事件示例代码
Dec 02 Javascript
用Javascript获取页面元素的具体位置
Dec 09 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
Node.js中路径处理模块path详解
Nov 14 Javascript
使用JS读取XML文件的方法
Nov 25 Javascript
jQuery为DOM动态追加事件的方法
Feb 16 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 Javascript
Angular父子组件通过服务传参的示例方法
Oct 31 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
桌面中心(三)修改数据库
2006/10/09 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
python数据结构之列表和元组的详解
2017/09/23 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python实现Virginia无密钥解密
2019/03/20 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
pycharm配置git(图文教程)
2019/08/16 Python
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
环保小标语
2014/06/13 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2015年春节标语口号
2014/12/09 职场文书
财政局长个人总结
2015/03/04 职场文书
新闻稿标题
2015/07/18 职场文书