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 相关文章推荐
jquery实现省市select下拉框的替换(示例代码)
Feb 22 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
vue-cli2.9.3 详细教程
Apr 23 Javascript
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
浅谈Vue SSR中的Bundle的具有使用
Nov 21 Javascript
微信小程序 button样式设置为图片的方法
Jun 19 Javascript
简单了解JavaScript作用域
Jul 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
php+html5实现无刷新图片上传教程
2016/01/22 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
javascript特殊用法示例介绍
2013/11/29 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python3 实现调用串口功能
2019/12/26 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
python 日志 logging模块详细解析
2020/03/31 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
医学专业职业生涯规划范文
2014/02/05 职场文书
活动总结格式
2014/08/30 职场文书
社会实践活动报告
2015/02/05 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书