强大!HTML5 3D美女图片旋转实现教程
又到周末,来弄点HTML5的特效玩玩,今天要折腾的是HTML5 3D图片特效,图片在垂直方向上被分割成一条条小矩形,在图片上拖动鼠标即可让每一个小矩形旋转,从而让图片形成3D立体的效果,来看看效果图:

大家也可以在这里看到具体的DEMO演示。
下面我们来分析一下实现这款HTML5 3D图片旋转特效的源代码,这里我们引用了知名的JS动画框架TweenMax.js。
先来看看HTML代码:
<ul id="level0" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level1" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level2" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level3" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level4" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level5" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level6" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level7" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level8" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level9" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level10" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level11" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
<ul id="level12" class='cube'>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
<li class='face'></li>
</ul>
这里我们看到,我们用了n个ul来实现将图片分割成n个小长方形,为了之后js调用的方便,我们将这些ul标识成level-n。
然后我们再来看看CSS代码,这里主要是引入了这张美女图片,哈哈。
.cube {
position: relative;
margin: 0em auto 0;
padding: 0px;
width: 20em;
height: 3.0em;
list-style: none;
transform-style: preserve-3d;
/*animation: ani 8s infinite linear;*/
}
.face {
box-sizing: border-box;
position: absolute;
top: 180px;
left: 50%;
/*border: 1px solid #f0f0f0;*/
margin: -8em;
padding: 1.6em;
width: 20em;
height: 2em;
opacity: .85;
background: lightblue;
/*Creative Commons image from http://www.flickr.com/photos/37825670@N07/3562600154/sizes/z/in/photostream/ */
background: url(k6dbiLv.jpg) -115px -900px;
background-repeat: no-repeat;
backface-visibility: hidden;
}
.face:nth-child(1) {
transform: translateZ(10em);
}
.face:nth-child(2) {
transform: rotateY(180deg) translateZ(10em);
}
.face:nth-child(3) {
transform: rotateY(90deg) translateZ(10em);
}
.face:nth-child(4) {
transform: rotateY(-90deg) translateZ(10em);
}
最后是Javascript代码,这里我们引入了jQuery和动画引擎TweenMax.js:
<script src='js/jquery.js'></script>
<script src='js/TweenMax.min.js'></script>
下面是实现旋转动画的js代码:
var gaps=[];
var gapscnt=0;
var currentLevel=0;
var px=[0,0,0,0,0,0,0,0,0,0,0,0,0];
var vx=[0,0,0,0,0,0,0,0,0,0,0,0,0];
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
init() function tickHandler() {
//run your logic here...
if(md){
gap=averageGaps(mouseX-oldMouseX);
}
gap*=.9;
vx[currentLevel]+=gap;
oldMouseX = mouseX;
var i;
for ( i = currentLevel; i < numLevels; i++) {
vx[i+1]+=((vx[i]-vx[i+1])/slow);
}
for ( i = currentLevel; i > 0; i--) {
vx[i-1]+=(vx[i]-vx[i-1])/slow;
}
for ( i = 0; i <numLevels; i++) {
px[i]+=(vx[i]-px[i]);
// trying tweenmax duration 0 method of setting rotationY
TweenMax.to($('#level'+i), 0, {rotationY:px[i]});
}
} // functions
function init(){
// code for cube
var d=0.12;var p=3;
for(var i=0;i<numLevels;i++){
var posString="-115px "+(-48*i)+ "px";
TweenMax.to($('#level'+i+' li'), 1, {css:{backgroundPosition: posString}, delay:(d*i)});}
TweenLite.ticker.addEventListener("tick", tickHandler);
$('.cube').mouseover(function(){
TweenMax.to($('.face'),1,{opacity:1});
});
$('.cube').mouseout(function(){
TweenMax.to($('.face'),1,{opacity:.85});
});
$(document).on('mousedown', function(event) {
event.preventDefault();
oldMouseX = mouseX;
gaps.length = 0;
md=true;
}).on('mouseup', function(event) {
md=false;
}).on('mousemove', function(event) {
mouseX = event.clientX - windowHalfX;
mouseY = event.clientY - windowHalfY;
}); $('#level0').mousedown(function(){currentLevel=0; });
$('#level1').mousedown(function(){currentLevel=1; });
$('#level2').mousedown(function(){currentLevel=2; });
$('#level3').mousedown(function(){currentLevel=3; });
$('#level4').mousedown(function(){currentLevel=4; });
$('#level5').mousedown(function(){currentLevel=5; });
$('#level6').mousedown(function(){currentLevel=6; });
$('#level7').mousedown(function(){currentLevel=7; });
$('#level8').mousedown(function(){currentLevel=8; });
$('#level9').mousedown(function(){currentLevel=9; });
$('#level10').mousedown(function(){currentLevel=10; });
$('#level11').mousedown(function(){currentLevel=11; });
$('#level12').mousedown(function(){currentLevel=12; }); var touchEnabled = 'ontouchstart' in window || navigator.msMaxTouchPoints;
if (touchEnabled == true) {
console.log("touchEnabled");
document.addEventListener('touchmove', onTouchMove, false);
document.addEventListener('touchstart', onTouchStart, false);
document.addEventListener('touchend', onTouchEnd, false);
} } function onTouchMove(event) {
event.preventDefault();
var touch = event.touches[0];
mouseX = touch.pageX - windowHalfX;
mouseY = touch.pageY - windowHalfY;
} function onTouchStart(event) {
event.preventDefault();
oldMouseX = mouseX;
gaps.length = 0;
md=true;
} function onTouchEnd(event) {
event.preventDefault();
md = false;
} function averageGaps(n){
if(isNaN(n)){ return 0; }
var gl=gaps.length;
gaps[gapscnt]=n;
var ave =0;
for (var i = 0; i < gl; i++) {
ave+=gaps[i];
};
gapscnt=(gapscnt+1)%10;
var tmp=ave/gl;
if(isNaN(tmp)){tmp=0; }
return tmp;
}
在TweenMax的帮助下,动画实现简单了不少。
最后附上我们可爱的源代码,下载地址>>
强大!HTML5 3D美女图片旋转实现教程的更多相关文章
- 基于HTML5+CSS3的图片旋转、无限滚动、文字跳动特效
本文分享几种基于HTML5+CSS3实现的一些动画特效:图片旋转.无限滚动.文字跳动;实现起来均比较容易,动手来试试! 一.图片旋转 效果图如下: 这个效果实现起来其实并不困难.代码清单如下: < ...
- 9个超绚丽的HTML5 3D图片动画特效
在Web 1.0时代,我们的网页中图片数量非常少,而且都是以静态图片为主.HTML5的出现,推动了Web 2.0的发展,同时也催生出了很多绚丽的HTML5图片动画特效,特别是有些还有3D的动画效果.本 ...
- HTML5 3D动画效果
对以前来讲,3D动画拿到网页上展示是一件非常奢侈的事情,第一是浏览器不够先进,第二是大部分只能用flash实现伪3D.HTML5的出现,让实现网页3D动画变得非常简单,当然前提是你不要再使用像IE67 ...
- 7款超酷HTML5 3D动画精选应用及源码
对以前来讲,3D动画拿到网页上展示是一件非常奢侈的事情,第一是浏览器不够先进,第二是大部分只能用flash实现伪3D.HTML5的出现,让实现网页3D动画变得非常简单,当然前提是你不要再使用像IE67 ...
- HTML5图片旋转
HTML5图片旋转 首先我们使用Cococs2dx-Js-Lite版,来创建一个工程,我们所需要的开发环境如下: 1,webstrom 2,google chrome浏览器 3,cocos2dx-Js ...
- 8款超酷的HTML5 3D图片动画源码
1.HTML5移动端图片左右切换动画 今天要给大家分享一款很不错的图片左右切换焦点图动画,并且支持移动端触摸滑动.功能上,这款HTML5图片播放器支持鼠标滑动.手机端触摸滑动以及自动播放.外观上,这款 ...
- Scrapy爬取美女图片 (原创)
有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...
- 8个经典HTML5 3D动画赏析
HTML5技术已经越来越被我们所接受,特别是一些3D的动画特效.本文介绍的8个HTML5 3D动画并没有特别华丽的界面,但是比较实用,涉及到3D图片.3D图表.3D按钮等方面,一起来看看. 1.HTM ...
- 20+功能强大的jQuery/CSS3图片特效插件
以下是分享的20几个不错的图片特效插件,基于jQuery和CSS3. 1.jQuery图片下滑切换播放效果 这是一款基于jQuery的焦点图插件,这款焦点图的特点是有向下滑动的动画效果,滑到底部时,有 ...
随机推荐
- 【机器学习】DBSCAN Algorithms基于密度的聚类算法
一.算法思想: DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层 ...
- 使用一层神经网络训练mnist数据集
import numpy as np import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat ...
- poj1988(判断一个结点下面有多少个结点,推荐)
题意:有n个元素,开始每个元素自己一栈,有两种操作,将含有元素x的栈放在含有y的栈的顶端,合并为一个栈.第二种操作是询问含有x元素下面有多少个元素. 6 M 1 6 C 1 M 2 4 M 2 6 C ...
- c++ 调用matlab程序
以64 bit win7下的matlab 2012a(64bit)和vs2010为例:[1] 在vs2010中新建一个C++控制台工程,添加依赖项:(请根据自己的matlab安装目录更改)[2] ...
- .NET ramework 4.0安装失败
1.停止Window 升级服务: 2.Windows 目录下的 SoftwareDistribution 重命名: 3.安装 .Net Framework 下面是百度上的方法,比较复杂 解决方法:1) ...
- laravel 5.4在控制器构造函数中获取auth中间件失败
想在控制器的构造函数中取出登录的用户 ,保存到类的属性中. 当然可以用Auth::user(),可以做到,但是不想这么做. 没想到这个属性一直是空的.后来用xdebug调试,在中间件handle和构造 ...
- Thinkphp CURD中的where方法
今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...
- spark1.6内存管理
Spark从1.6.0版本开始,内存管理模块就发生了改变,旧版本的内存管理模块是实现了StaticMemoryManager 类,现在被称为"legacy"."Leg ...
- JAVA是否可以作脚本语言呢
答:是可以的. 只是叫另一个名字-beanshell.印象里她好像还是第一款jvm语言.应该挺多年没更新了. 我之所以知道它,是当年折腾jEdit这款编辑器较多,它的内置脚本引擎使用的就是beansh ...
- adc 测量子系统
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> # ...