jQuery实现可拖拽3D万花筒旋转特效


Posted in Javascript onJanuary 03, 2017

这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画。

进去后可以上下左右的拖动图片。

本示例中使用到了CSS3的transform-style 属性,该规定如何在 3D 空间中呈现被嵌套的元素。

默认值: flat

继承性: no

版本: CSS3

JavaScript 语法: object.style.transformStyle="preserve-3d"

有2个属性值可选择:

flat 子元素将不保留其 3D 位置。

preserve-3d 子元素将保留其 3D 位置。

示例代码如下:

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>jQuery可拖拽3D万花筒旋转特效 - 何问起</title><base target="_blank" />
<style type="text/css">
 *{margin:0;padding: 0;}
 .hovertree{
 width: 120px;
 height: 180px;
 margin: 150px auto 0;
 position: relative;
 /*transform 旋转元素*/
 transform-style:preserve-3d;
 transform:perspective(800px) rotateX(-10deg) rotateY(0deg);
 }
 body{background-color: #66677c;}
 .hovertree img{
 position: absolute;
 width: 100%;
 height: 100%;
 border-radius: 5px;
 box-shadow: 0px 0px 10px #fff;
 /*倒影的设置*/
 -webkit-box-reflect:below 10px -webkit-linear-gradient(top,rgba(0,0,0,0) 50%,rgba(0,0,0,.5) 100%);
 }
 .hovertree p{
 width: 1200px;
 height: 1200px;
 background: -webkit-radial-gradient(center center,600px 600px,rgba(255,255,255,.5),rgba(0,0,0,0));
 position: absolute;
 top:100%;left:50%;
 margin-top: -600px;
 margin-left: -600px;
 border-radius:600px;
 transform:rotateX(90deg);
 }
 .hewenqi{position:absolute;z-index:99;}
 a{color:blue;}
</style>
</head>
<body>
<div class="hovertree">
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/01.jpg"/>
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/02.jpg" />
 <img src="http://cms.hovertree.com/hvtimg/201511/9rour12a.jpg"/>
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/04.jpg"/>
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/05.jpg"/>
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/06.jpg"/>
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/07.jpg"/>
 <img src="http://hovertree.com/texiao/css/14/hovertreepic/08.jpg"/>
 <img src="http://hovertree.com/hvtimg/201511/6j9j6tk5.png"/>
 <img src="http://cms.hovertree.com/hvtimg/201512/wfevf6yh.jpg"/>
 <p></p>
</div>
<script src="http://down.hovertree.com/jquery/jquery-1.11.0.min.js" type="text/javascript"></script>
<script type="text/javascript">
 $(function(){
var imgL=$(".hovertree img").size();
var deg=360/imgL;
var roY=0,roX=-10;
 var xN=0,yN=0;
 var play=null;
 $(".hovertree img").each(function (i) {
 $(this).css({
 //<!--translateZ 定义2d旋转沿着z轴-->
 "transform":"rotateY("+i*deg+"deg) translateZ(300px)" });
 //<!--防止图片被拖拽-->
 $(this).attr('ondragstart','return false');
 });
 $(document).mousedown(function(ev){
 var x_=ev.clientX;
 var y_=ev.clientY;
 clearInterval(play);
 console.log('我按下了');
 $(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;
  console.log('移动');
  //$('body').append('<div style="width:5px;height:5px;position:absolute;top:'+y+'px;left:'+x+'px;background-color:red"></div>');
  $('.hovertree').css({
   transform:'perspective(800px) rotateX('+roX+'deg) rotateY('+roY+'deg)'
  });
  /*之前的鼠标坐标*/
  x_=ev.clientX;
  y_=ev.clientY;
 });
 }).mouseup(function(){
  $(this).unbind('mousemove');
  var 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;
  $('.hovertree').css({
   transform:'perspective(800px) rotateX('+roX+'deg) rotateY('+roY+'deg)'
  });
  },30);
 });
});
</script>
<div style="text-align:center;margin:250px 0; font:normal 14px/24px 'MicroSoft YaHei';">
 <p class="hewenqi">来源:<a href="http://hovertree.com/">何问起</a> <a href="http://hovertree.com/h/bjag/5x3kdw0k.htm">说明</a></p>
</div>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
移除AngularJS下URL中的#字符的方法
Jun 19 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 Javascript
jQuery使用each方法与for语句遍历数组示例
Jun 16 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
easy ui datagrid 从编辑框中获取值的方法
Feb 22 Javascript
canvas实现环形进度条效果
Mar 23 Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
Angular Material Icon使用详解
Nov 07 Javascript
详解JavaScript常量定义
Jan 03 #Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 #Javascript
JavaScript实现图片瀑布流和底部刷新
Jan 02 #Javascript
一个例子轻松学会Vue.js
Jan 02 #Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 #Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 #Javascript
JavaScript cookie详解及简单实例应用
Dec 31 #Javascript
You might like
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
一些mootools的学习资源
2010/02/07 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Python实现一个论文下载器的过程
2021/01/18 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
英国女士家居服网站:hush
2017/08/09 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
2014年教师培训的自我评价
2014/01/03 职场文书
求职信模板怎么做
2014/01/26 职场文书
高三数学教学反思
2016/02/18 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle