用css3效果做了一个颗粒翻页效果,布局上,一张图片做底层,在这张图片上用js创建一层小的行和列各为r和c的小span,给这些span分别设置background-position;用来覆盖原来的一张图片(创建span的时候利用DOM操作,利用两个循环分别创建行和列,然后在循环中创建元素和设置元素css属性);然后在点击的时候添加事件,使用transform设置翻转效果,这里,我们可以设置逐个翻转和斜线翻转(斜线翻转利用的是span的行和列相加值相等原理);这里需要注意的是设置图片播放顺序,span上的图片永远比下面div的整张图片小一级,并且在更换图片的完成的时候瞬时间更换span和div的图片,使之继续符合上述的图片层级,这个时间差,人眼是无法识别的。

大体我的思路就是这样,写的不是很清楚,现在想来,做一个合格的优秀的程序员,语言表达确实是比较重要的,因为分享和学习才是一个人不断进步的基础。

话不多说,直接上代码,希望大家一起分享一起进步

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>颗粒翻转</title>
<style>
*{margin:0;padding:0;}
#box{width:700px;
height: 400px;
margin:50px auto;
position: relative;
}
#box span{
position: absolute;
width: 100%;
height: 100%;
transition:1s all ease;
transform:rotateY(0deg);
transform-style:preserve-3d;
}
#box span em{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
#box .front{
background-image: url("img/0.jpg");
transform:translateZ(1px);
}
#box .back{
background-image: url("img/1.jpg");
transform:translateZ(-1px) scale(-1,1);
}
#box:active span{
/*transform:rotateY(180deg);*/
}
</style>
<script>
window.onload = function(){
var oBox = document.getElementById('box');
var C = 7;
var R = 4;
for(var r = 0;r<R;r++){
for(var c = 0;c<C;c++){
var oSpan = document.createElement('span');
oSpan.style.width = oBox.offsetWidth/C +'px';
oSpan.style.height = oBox.offsetHeight/R +'px';
oSpan.style.left = oBox.offsetWidth/C*c+'px';
oSpan.style.top = oBox.offsetHeight/R*r+'px';
oSpan.innerHTML ='<em class="front"></em><em class="back"></em>';
oBox.appendChild(oSpan);
oSpan.children[0].style.backgroundPosition = -oSpan.offsetLeft+'px '+-oSpan.offsetTop+'px';
oSpan.children[1].style.backgroundPosition = -oSpan.offsetLeft+'px '+-oSpan.offsetTop+'px';
oSpan.r = r;
oSpan.c = c;
}
}
var iNow=0;
var bReady = true;
oBox.onclick = function(){
if(bReady==false){return;}
bReady = false;
iNow++;
var aSpan = oBox.children;
for(var i = 0;i<aSpan.length;i++){
aSpan[i].style.transition = '1s all ease '+100*(aSpan[i].r+aSpan[i].c)+'ms';
aSpan[i].style.transform ='rotateY(180deg)';
}
//换图
aSpan[aSpan.length-1].addEventListener('transitionend',function(){
bReady = true;
for(var i = 0;i<aSpan.length;i++){
aSpan[i].style.transition = 'none';
aSpan[i].style.transform ='rotateY(0deg)';
aSpan[i].children[0].style.backgroundImage ='url("img/'+(iNow%3)+'.jpg")';
aSpan[i].children[1].style.backgroundImage ='url("img/'+(iNow+1)%3+'.jpg")';
}
},false)
};
};
</script>
</head>
<body>
<div id="box">
</div>
</body>
</html>

  

最新文章

  1. SSTABLE简介
  2. knockoutJS学习笔记05:控制文本和外观绑定
  3. vCenter Server Appliance
  4. instanceof 与isAssignableFrom
  5. 【JAVA单例模式详解】
  6. 11g Physical Standby配置
  7. Java 程序员们值得一看的好书推荐[转载]
  8. wireshark过滤使用
  9. MyEclipse JCO tomcat 提示查找不到sapjco3.dll
  10. Swift Tips - 当 Swift 遇上 CocoaPods
  11. String内存陷阱简介
  12. Apache httpd + tomcat 简单集群
  13. Django下TemplateDoesNotExist 异常的解决方法:
  14. netcat
  15. 如何实现Linux下的U盘(USB Mass Storage)驱动
  16. tornado web框架
  17. 使用mod_cluster进行apache httpd server和jboss eap 6.1集群配置
  18. transient关键字小结
  19. [ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂
  20. Objective-C日记-之KVC

热门文章

  1. sap透明表、结构、簇介绍以及查找表方法
  2. 实战2--应用EL表达式显示投票结果
  3. 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
  4. android 进程/线程管理(三)----Thread,Looper / HandlerThread / IntentService
  5. 为 Virtual Box 中的 CentOS 6.6 配置本地DVD光盘做yum软件源
  6. Showing progress bar in a status bar pane
  7. 第十章 MySQL 常用函数
  8. Linux环境安装MQ
  9. visual studio 2013 快捷键大全
  10. VMware 12Pro 安装MACOS 10.10