以前看到别人做的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. JQuery如何监听DIV内容变化

    这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...

  2. COGS2642 / Bzoj4590 [Shoi2015]自动刷题机

    Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 906  Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...

  3. [BZOJ1026][SCOI2009]windy数 解题报告|数位dp

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 一直 ...

  4. bzoj 1009 DP+矩阵加速

    我们用DP来解决这个问题 W[I,J]表示准考证的第I位,和不吉利的数匹配到了第J位的方案数,这个状态的表示也可以看成 当前到第I位了,准考证的后J位是不吉利的数的前J位,的方案数 那么我们最后的an ...

  5. appium===Python+Appium环境部署教程

    *前提是你已经安装好python,以及python的pip工具 *安装python请自行百度教程~ 1.安装安卓sdk 安装包:http://tools.android-studio.org/inde ...

  6. 【 Linux 】I/O工作模型及Web服务器原理

    一.进程.线程     进程是具有一定独立功能的,在计算机中已经运行的程序的实体.在早期系统中(如linux 2.4以前),进程是基本运作单位,在支持线程的系统中(如windows,linux2.6) ...

  7. 常用的find命令

    find命令 find [路径名] –name/-size/-perm find [路径名] –name “*p” 在路径搜索p结尾的文件夹及文件 find [路径名] –name “[ab]*” 在 ...

  8. servletcontext.getRealPath()

    getRealPath方法已经不建议使用了: http://blog.csdn.net/lzynihao/article/details/8315796 另外:http://veryls.iteye. ...

  9. 关于 Notepad++ 崩溃之后正在编辑文件内容被清空的致命问题的补救措施

    Notepad++ 以其功能强大.界面简洁.操作简单方便.超低内存耗用而受众多挨踢从业者青睐. Notepad++ 不像 UE 那样在你编辑的时候会定时生成 bak 备份文件.虽然 Notepad++ ...

  10. KDJ金叉测试

    # -*- coding: utf-8 -*- import os import pandas as pd # ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_ ...