欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-23 16:49:47
这是一个使用了css3立体效果的强大特效,本特效使用jquery跟css3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3d旋转动画。 进去后...

这是一个使用了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>

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