以前看到别人做的banner图,3d变化,很羡慕啊,一直不知道怎么做,直到看到了这个样式perspective,然后就知道怎么实现了

一个简单的例子,扫起

demo下在地址    http://files.cnblogs.com/files/wtcsy/demoxx.rar

perspective

perspective 属性定义 3D 元素距视图的距离,以像素计。该属性允许您改变 3D 元素查看 3D 元素的视图。

当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身。

注释:perspective 属性只影响 3D 转换元素。

从w3school上抄的一段话,我也是这么理解的....   地址 http://www.w3school.com.cn/cssref/pr_perspective.asp

看过的一些介绍perspective比较好的资料

先理解下x,y,z轴

理解perspective

理解perspective下的旋转

一些demo

一些问题

看过的一些介绍perspective比较好的资料

http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/

http://www.alloyteam.com/2012/10/the-css3-transform-perspective-property/

先理解下x,y,z轴

x就是水平方向,比如x轴方向旋转,就是设置rotateX

y就是垂直方向,比如y轴方向旋转,就是设置rotateY

z就是由电脑屏幕到人脸的那个方向,比如z轴方向旋转,就是设置rotateZ

如何理解perspective

上面的书面定义,其实也不是那么好理解,如果以一些例子来理解可能就简单很多了

先要理解透视点是在浏览器的前方

比如定义了一个div,假如叫vv吧,设置vv的perspective的样式,它的值是1200px;

然后设置vv的translateZ (前提要理解 x,y,z轴,translateX ,translateY ,translateZ 才方便理解perspective )

在translateZ(0)的时候,可以理解为vv到透视点的距离是1200px,这时他的大小(就是宽高,跟不设置perspective是一样的)

如果把vv设置成translateZ(600px),就会发现vv变大了,vv到透视点的距离就是600px了.就好像到一张纸,在你眼前1米的时候比较小,但是到了0.1米的时候比较大

当vv到了translateZ(1200px)的时候,vv就不见了,也好理解,跟眼睛在一起了,看不到了

这是张鑫旭写的例子, 直接拿过来用

http://www.zhangxinxu.com/study/201209/transform-perspective-translateZ.html

理解perspective下的旋转

如果设置只是设置了rotateX(rotateY,rotateZ)的旋转还是很好理解的,但是加上了perspective后,就难一点点了

比如设置div绕y轴方向旋转,设置了perspective为1200px,然后再设置translateZ(600px),那div就以100px的距离绕y轴旋转

我擦

如果设置div绕x轴方向旋转,设置了perspective为1200px,然后再设置translateZ(600px),那div就以100px的距离绕x轴旋转

我擦

一些demo

手机页面切换一般都一些效果可以选择,我的手机上就有这些效果,风车,方盒,旋转,翻页

方盒

就是那个二维码了

主要是通过图片宽度的一半当成translateZ,然后计算缩放的大小

旋转

这个就是rotateY,加了perspective,3d效果更好

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>wo ca!!!!!</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<style>
*{margin:0;padding:0;}
body{background: #000}
.warp{width: 200px; height: 320px; margin:50px auto; padding: 20px 0; position: relative; overflow: hidden;background: #000;
-webkit-perspective:1200px;
-moz-perspective:1200px;
-ms-perspective:1200px;
-o-perspective:1200px;
}
.list{width: 200px; height: 320px; position: absolute;left: 0;top: 20px;
-webkit-transform:rotateY(-90deg);
-moz-transform:rotateY(-90deg);
-ms-transform:rotateY(-90deg);
-o-transform:rotateY(-90deg);
}
.list img{height: 100%; width: 100%;}
.curr{display: block;
-webkit-transform:rotateY(0deg);
-moz-transform:rotateY(0deg);
-ms-transform:rotateY(0deg);
-o-transform:rotateY(0deg);
}
</style>
<body>
<div id="con" class="warp">
<div id="a0" class="list curr"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_1.jpg" alt=""></div>
<div id="a1" class="list"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_2.jpg" alt=""></div>
<div id="a2" class="list"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_3.jpg" alt=""></div>
<div id="a3" class="list"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_4.jpg" alt=""></div>
</div>
<br>
<div style="margin:20px auto; width:200px;">
<input type="button" value="xxxx" onclick="xx()">
</div>
<script src="http://files.cnblogs.com/files/wtcsy/zepto.js"></script>
<script>
$(function($){
var curr = 0;
var i=0;
var num = 30
var step = 90/num;
var a1deg = 0;
var a2deg = -90;
function css($dom,cssNname,value){
var obj={}
obj["-o-"+cssNname] = value;
obj["-webkit-"+cssNname] = value;
obj["-moz-"+cssNname] = value;
obj["-ms-"+cssNname] = value;
$dom.css(obj)
}
window.xx = function(){
if(i==num){
if(curr==3){
curr=0;
}else{
curr+=1;
}
i=0;
return;
}
i++;
var my = arguments.callee;
if(i>15){
var other = curr==3?0:curr+1
//$("#a"+other).css("-webkit-transform","rotateY("+(a2deg+step*i*2-90)+"deg) ").show();
//$("#a"+curr).css("-webkit-transform","rotateY("+(-90)+"deg) ").hide();
css($("#a"+other),"transform","rotateY("+(a2deg+step*i*2-90)+"deg)")
$("#a"+other).show();
css($("#a"+curr),"transform","rotateY("+(-90)+"deg)")
$("#a"+curr).hide();
}else{
$("#a"+curr).show()
css($("#a"+curr),"transform","rotateY("+(a1deg+step*i*2)+"deg)")

}
setTimeout(function(){my()},16)
}
});
</script>
</body>
</html>

翻页

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>wo ca!!!!!</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<style>
*{margin:0;padding:0;}
body{background: #000}
.warp{width: 200px; height: 320px; margin:50px auto; padding: 20px; position: relative; overflow: hidden;background: #000;}
.list{width: 200px; height: 320px; position: absolute;left: 20px;top: 20px;display: none;
-webkit-perspective:1200px;
-ms-perspective:1200px;
-o-perspective:1200px;
-moz-perspective:1200px;
}
.list img{height: 100%; width: 200%;}
.l{height: 320px; width: 100px; display:inline-block; overflow: hidden;
-webkit-transform:rotateY(0deg) ;
-ms-transform:rotateY(0deg) ;
-o-transform:rotateY(0deg) ;
-moz-transform:rotateY(0deg) ;
-webkit-transform-origin:right center;
-ms-transform-origin:right center;
-o-transform-origin:right center;
-moz-transform-origin:right center;
}
.r{height: 320px; width: 100px; display:inline-block;overflow: hidden;
-webkit-transform:rotateY(0deg);
-ms-transform:rotateY(0deg);
-o-transform:rotateY(0deg);
-moz-transform:rotateY(0deg);
-webkit-transform-origin:left center;
-ms-transform-origin:left center;
-o-transform-origin:left center;
-moz-transform-origin:left center;
}
.r>img{margin-left: -100px;}
.curr{ z-index: 10; display: block;}
</style>
<body>
<div id="con" class="warp">
<div id="a0" class="list curr">
<div class="l"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_1.jpg" alt=""></div><div class="r"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_1.jpg" alt=""></div>
</div>
<div id="a1" class="list">
<div class="l"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_2.jpg" alt=""></div><div class="r"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_2.jpg" alt=""></div>
</div>
<div id="a2" class="list">
<div class="l"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_3.jpg" alt=""></div><div class="r"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_3.jpg" alt=""></div>
</div>
<div id="a3" class="list">
<div class="l"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_4.jpg" alt=""></div><div class="r"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_4.jpg" alt=""></div>
</div>
</div>
<br>
<div style="margin:20px auto; width:200px;">
<input type="button" value="左翻一页" onclick="xx()">  <input type="button" value="右翻一页" onclick="yy()">
</div>
<script src="http://files.cnblogs.com/files/wtcsy/zepto.js"></script>
<script>
$(function($){
var curr = 0;
var i=0;
var num = 30
var step = 90/num;
var a1deg = 0;
var a2deg = -90;
function css($dom,cssNname,value){
var obj={}
obj["-o-"+cssNname] = value;
obj["-webkit-"+cssNname] = value;
obj["-moz-"+cssNname] = value;
obj["-ms-"+cssNname] = value;
$dom.css(obj)
}
window.xx = function(){
if(i==num){
if(curr==3){
curr=0;
}else{
curr+=1;
}
i=0;
return;
}
i++;
var my = arguments.callee;
var $currP = $("#a"+curr),
$currL = $currP.find(".l"),
$currR = $currP.find(".r"),
other = curr==3?0:curr+1,
$nextP = $("#a"+other).show(),
$nextL = $nextP.find(".l"),
$nextR = $nextP.find(".r");
if(i<=15){
//$currL.css("-webkit-transform","rotateY("+(a1deg+step*i*2)+"deg)");
css($currL,"transform","rotateY("+(a1deg+step*i*2)+"deg)")
if(i==15){
$currP.removeClass("curr").show();
$nextP.addClass("curr");
//$nextR.css("-webkit-transform","rotateY("+(-90)+"deg)");
css($nextR,"transform","rotateY("+(-90)+"deg)")
}
}else{
//$nextR.css("-webkit-transform","rotateY("+(a2deg+step*i*2-90)+"deg)");
css($nextR,"transform","rotateY("+(a2deg+step*i*2-90)+"deg)")
if(i==30){
$currP.hide();
//$currL.css("-webkit-transform","rotateY("+(0)+"deg)");
css($currL,"transform","rotateY("+(0)+"deg)")
}
}
setTimeout(function(){my()},16);
}
window.yy = function(){
if(i==num){
if(curr==0){
curr=3;
}else{
curr-=1;
}
i=0;
return;
}
i++;
var my = arguments.callee;
var $currP = $("#a"+curr),
$currL = $currP.find(".l"),
$currR = $currP.find(".r"),
other = curr==0?3:curr-1,
$nextP = $("#a"+other).show(),
$nextL = $nextP.find(".l"),
$nextR = $nextP.find(".r");

if(i<=15){
//$currR.css("-webkit-transform","rotateY("+(a1deg-step*i*2)+"deg)");
css($currR,"transform","rotateY("+(a1deg-step*i*2)+"deg)")
if(i==15){
$currP.removeClass("curr").show();
$nextP.addClass("curr");
//$nextL.css("-webkit-transform","rotateY("+(90)+"deg)");
css($nextL,"transform","rotateY("+(90)+"deg)")
}
}else{
//$nextL.css("-webkit-transform","rotateY("+(90-step*(i-15)*2)+"deg)");
css($nextL,"transform","rotateY("+(90-step*(i-15)*2)+"deg)")
if(i==30){
$currP.hide();
//$currR.css("-webkit-transform","rotateY("+(0)+"deg)");
//$currL.css("-webkit-transform","rotateY("+(0)+"deg)");
css($currR,"transform","rotateY("+(0)+"deg)")
css($nextL,"transform","rotateY("+(0)+"deg)")
}

}
setTimeout(function(){my()},16);
}
});
</script>
</body>
</html>

风车

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<title>wo ca!!!!!</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<style>
*{margin:0;padding:0;}
body{background: #000}
.warp{width: 200px; height: 320px; margin:50px auto; position: relative; overflow: hidden;background: #000}
.list{width: 200px; height: 320px; position: absolute;left: 0;top: 0;
-webkit-transform:rotateZ(-90deg);
-ms-transform:rotateZ(-90deg);
-o-transform:rotateZ(-90deg);
-moz-transform:rotateZ(-90deg);
-webkit-transform-origin:left bottom;
-ms-transform-origin:left bottom;
-o-transform-origin:left bottom;
-moz-transform-origin:left bottom;

}
.list img{height: 100%; width: 100%;}
.curr{
-webkit-transform:rotateZ(0deg);
-ms-transform:rotateZ(0deg);
-o-transform:rotateZ(0deg);
-moz-transform:rotateZ(0deg);
}
</style>
<body>
<div id="con" class="warp">
<div id="a0" class="list curr"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_1.jpg" alt=""></div>
<div id="a1" class="list"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_2.jpg" alt=""></div>
<div id="a2" class="list"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_3.jpg" alt=""></div>
<div id="a3" class="list"><img src="http://images.cnblogs.com/cnblogs_com/wtcsy/659251/o_4.jpg" alt=""></div>
</div>
<br>
<div style="margin:20px auto; width:200px;">
<input type="button" value="xxxx" onclick="xx()">
</div>
<script src="http://files.cnblogs.com/files/wtcsy/zepto.js"></script>
<script>
$(function($){
var curr = 0;
var i=0;
var num = 30
var step = 90/num;
var a1deg = 0;
var a2deg = -90;
function css($dom,cssNname,value){
var obj={}
obj["-o-"+cssNname] = value;
obj["-webkit-"+cssNname] = value;
obj["-moz-"+cssNname] = value;
obj["-ms-"+cssNname] = value;
$dom.css(obj)
}
window.xx = function(){
if(i==num){
if(curr==3){
curr=0;
}else{
curr+=1;
}
i=0;
return;
}
i++;
var my = arguments.callee;
//$("#a"+curr).css("-webkit-transform","rotateZ("+(a1deg+step*i)+"deg)");
css($("#a"+curr),"transform","rotateZ("+(a1deg+step*i)+"deg)")
var other = curr==3?0:curr+1
//$("#a"+other).css("-webkit-transform","rotateZ("+(a2deg+step*i)+"deg)");
css($("#a"+other),"transform","rotateZ("+(a2deg+step*i)+"deg)")
setTimeout(function(){my()},16)
}
});
</script>
</body>
</html>

一些问题

在左右滑动的时候,如何避免上下的滑动了(ps:当直接上下滑动的时候,应该让其上下滑动)

这里我用的是阻止事件默认行为,但是我看别人写的banner并不是这么写的,原理不明白?求解

perspective 的笔记的更多相关文章

  1. 游戏服务器学习笔记 5———— twisted Perspective Broker 透明代理

    实际上这章压根不需要我来说,twisted官网的Doc里面有专门介绍的章节.写的非常详细. http://twistedmatrix.com/documents/current/core/howto/ ...

  2. Premier使用笔记

    在高中时喜欢打CS,也喜欢看高手的视频,一直打到这游戏淘汰了,为了纪念,也尝试着做了一个视频,就是利用该入门级软件.无意中翻出了当时使用这软件时的笔记,整理到这里,可能这些内容对于博客园来讲太垃圾,毫 ...

  3. [读书笔记]Mindset

    开始读 Mindset.准备开始记录读书笔记. Question: I know a lot of workaholics on the fast track who seem to have a f ...

  4. DirectX 总结和DirectX 9.0 学习笔记

    转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...

  5. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  6. IronPython .NET Integration官方文档翻译笔记

    http://ironpython.net/documentation/dotnet/这是原文地址 以下笔记仅记录阅读过程中我认为有必要记录的内容,大多数都是依赖翻译软件的机翻,配合个人对代码的理解写 ...

  7. Matplotlib学习笔记(二)

    原  Matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .car ...

  8. Matplotlib学习笔记(一)

    原   matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .ca ...

  9. Spark 基本函数学习笔记一

      Spark 基本函数学习笔记一¶ spark的函数主要分两类,Transformations和Actions. Transformations为一些数据转换类函数,actions为一些行动类函数: ...

随机推荐

  1. POJ 3070 + 51Nod 1242 大斐波那契数取余

    POJ 3070 #include "iostream" #include "cstdio" using namespace std; class matrix ...

  2. [NOIp普及组2011]瑞士轮

    洛谷题目链接:瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平,偶然性较 ...

  3. vivo面试学习1(io和nio)

    一.io流(一次从open到底层的操作) 输入和输出流 IO流 字节流 Reader.Writer 字符流 InputStream.OutputStream 字节流:可以处理所有bit为单位存储的文件 ...

  4. codevs1063 合并果子 优先队列(小根堆)

    题目传送门 这道题很容易想到优先把两堆重量最小的合并比较优 然后乱搞一下就可以啦 #include<cstdio> #include<cstring> #include< ...

  5. NYOJ 211 Cow Contest (弗洛伊德+传递闭包 )

    title: Cow Contest 弗洛伊德+传递闭包 nyoj211 tags: [弗洛伊德,传递闭包] 题目链接 描述 N (1 ≤ N ≤ 100) cows, conveniently nu ...

  6. cve-2012-5613 mysql本地提权

    cve-2012-5613  是一个通过FILE权限写Trigger的TRG存储文件(即伪造Trigger),由root触发而导致权限提升的漏洞.不知道为什么这个漏洞一直没修,可能mysql认为这是一 ...

  7. 【Mysql优化】索引碎片与维护

    在长期的数据更改过程中, 索引文件和数据文件,都将产生空洞,形成碎片.(不停的删除修改导致) 解决办法: (1)我们可以通过一个nop操作(不产生对数据实质影响的操作), 来修改表. 比如: 表的引擎 ...

  8. linux软件管理(Vim编辑器使用) ——(七)

    windows : .exe     安装 .卸载 安装:  mysql.exe  cc.exe 卸载 : 该软件唯一的标识  ,包名   alibaba android : *.apk   卸载 包 ...

  9. mysql常用函数示例

    CREATE TABLE `orders` ( `OrderId` INT(10) NOT NULL AUTO_INCREMENT COMMENT '编号', `ProductName` VARCHA ...

  10. JavaSript中数组方法是否对原数组产生影响

    JavaScript中数组方法有很多.某次面试被问到,concat()方法会对影响到原数组吗.当时记得不牢,犹豫地说"会吧...".于是决定总结一下哪些数组方法会对原数组产生影响. ...