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 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
JS获取表格内指定单元格html内容的方法
Mar 31 Javascript
javascript动态创建链接的方法
May 13 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
JS定义类的六种方式详解
May 12 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
原生js仿淘宝网商品放大镜效果
Feb 28 Javascript
详解node.js平台下Express的session与cookie模块包的配置
Apr 26 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
微信小程序实现手指触摸画板
Jul 09 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
May 13 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获取数组中重复数据的两种方法
2013/06/28 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
php并发加锁示例
2016/10/17 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
python批量获取html内body内容的实例
2019/01/02 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python实现代码统计程序
2019/09/19 Python
Python如何进行时间处理
2020/08/06 Python
python 制作网站小说下载器
2021/02/20 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
给老婆的搞笑检讨书
2014/01/12 职场文书
电子商务应届生自我鉴定
2014/01/13 职场文书
单位承诺书格式
2014/05/21 职场文书
2014会计年终工作总结
2014/12/20 职场文书
西岭雪山导游词
2015/02/06 职场文书
《海上日出》教学反思
2016/02/23 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python
vscode内网访问服务器的方法
2022/06/28 Servers