3d效果的图片轮播

CSS3的3d变换

CSS3给我们提供了一个新的功能,那就是3d变换。3d变换和2d变换的基本API函数类似,只不过多了些在Z轴上的操作,不难使用。

但是,为了让元素拥有3d变换的功能,我们需要给他的父元素设置相应的变换属性。与其相关的属性为perspective和transform-style。在新版的Chrome中已不需要添加私有前缀,不过为了兼容之前版本的浏览器,建议还是加上私有前缀(本例中并未添加私有前缀)。

perspective属性取值为:none|number。当值为数字时,意味着该元素与我们眼睛之间的距离为该值。该属性定义在需要3d变换的元素的父元素上,声明该属性意味着定义了一个3d空间,值越小,3d效果越明显。其实可以有种方法更易理解,3d变换坐标系的Z轴我们可以类比为z-index定义的层叠上下文,而perspective取值就为眼睛与该层之间的距离。

可以借用一张图来阐述:

d值为设置的perspective属性,z值为元素所在Z轴距离屏幕的长度,上图为z值为正值,下图的z值为负值。

对于transform-style属性的取值有两种,分别为flat和preserve-3d。flat意味不存在3d空间,在Z平面上的变换会平展到x-y面上来,没有3d效果。preserve-3d则将该元素的所有子元素放入3d空间中,执行3d变换。

综上来看,transform-style可以为子元素创建3d空间,perspective可以设置视距(透视视深),而且该值只对第一个子元素有效。这两个属性可以结合使用,transform-style可以延续设置的视深,供其子元素使用。

实现3d轮播

轮播的实现并不难,在这里只是将2d转换为3d效果。为了实现要求,我们需要对图片呈现区域进行分片,每个分片执行不同的3d操作,造成很炫的视觉效果。

        body{margin: 0;padding: 0;overflow: hidden;}
        .wrap{width: 560px;margin:30px auto;border: 10px solid #000000;}
        .win{position: relative;perspective:none;}
        .segment{transform-style: preserve-3d;}
        .segment p{margin:0;padding:0;position:absolute;width:140px;height:100px;background: url(img/0.jpg)}
        .container{height: 300px;}
        .shadow{height:100%;width:100%;position: absolute;left:0;top:0;box-shadow: inset 0 0 40px;}
        .tools{margin: 0;padding: 0;list-style: none;position: absolute;right:30px;bottom: 20px;}
        .tools li{float: left;margin-right:20px;}
        .btn>a:nth-child(1){display:block;width:45px;height:45px;background: url(./img/icons.png) 0 0 no-repeat;position: absolute;left:10px;top:135px;}
        .btn>a:nth-child(2){display:block;width:45px;height:45px;background: url(./img/icons.png) 0 -45px no-repeat;position: absolute;right:10px;top:135px;}
        .win .fly p{opacity: 0;}
        .win .fly p:nth-child(1){transform: rotateX(30deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(2){transform: rotateX(330deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(3){transform: rotateX(3450deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(4){transform: rotateX(-30deg) rotateY(-10deg) translateZ(500px);}
        .win .fly p:nth-child(5){transform: rotateX(330deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(6){transform: rotateX(40deg) rotateY(20deg) translateZ(500px);}
        .win .fly p:nth-child(7){transform: rotateX(340deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(8){transform: rotateX(3450deg) rotateY(60deg) translateZ(500px);}
        .win .fly p:nth-child(9){transform: rotateX(230deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(10){transform: rotateX(20deg) rotateY(20deg) translateZ(500px);}
        .win .fly p:nth-child(11){transform:rotateX(30deg) rotateY(10deg) translateZ(500px);}
        .win .fly p:nth-child(12){transform: rotateX(10deg) rotateY(15deg) translateZ(500px);}
        .tools .current{background: url(./img/icons.png) -8px -125px no-repeat;}
        .tools li{background: url(./img/icons.png) -23px -125px;width: 15px;height: 15px;}
    <div class="wrap">
        <div class="win">
            <div class="segment">
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
                <p></p>
            </div>
            <div class="container">
                <img id="pic" src="./img/0.jpg">
            </div>
            <div class="shadow"></div>
            <div class="btn">
                <a id="left" href="javascript:void 0"></a>
                <a id="right" href="javascript:void 0"></a>
            </div>
            <ul class="tools">
                <li class="current"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>
     $(function(){
            var ps = $("p",".segment"), p, c,m;
            var pic = $("#pic"),left = $("#left"),
                    right = $("#right");
            var counter = 0;
            var lis = $(".tools li");
            // 将图片区域分成12个片段
            function slice(){
                for(var i=0;i<12;i++){
                    c = Math.floor(i / 4);
                    m = i % 4;
                    p = $(ps[i]);
                    p.css({
                        left: m*140+"px",
                        top: c*100+"px"
                    });
                    p.css("background-position",-m*140+"px "+ (-c*100)+"px");
                }
            }
            slice();
            // 设置渐进和背景图片
            function coo(){
                $(".segment").addClass("fly");
                $(".segment p").css("transition","all 1s ease 0s");
                pic.attr("src","./img/"+counter+".jpg");
                setTimeout(function(){
                    $(".segment p").css({
                        "transition":"none",
                        "background-image": "url(img/"+counter+".jpg)"
                    });
                    $(".segment").removeClass("fly");
                },1000)

            }
            left.click(function(e){
                if(counter == 0){
                    counter = 4;
                }else{
                    counter--;
                }
                coo();
                $.each(lis,function(li){
                    $(lis[li]).removeClass("current");
                });
                $(lis[counter]).addClass("current");
            });
            right.click(function(){
                if(counter == 4){
                    counter = 0;
                }else{
                    counter++;
                }
                coo();
                $.each(lis,function(li){
                    $(lis[li]).removeClass("current");
                });
                $(lis[counter]).addClass("current");
            })
        })
时间: 2024-08-28 07:38:15

3d效果的图片轮播的相关文章

Android高级图片滚动控件,编写3D版的图片轮播器

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482089 大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博客了,我也是深感惭愧.那么今天的这篇既然是阔别了一个多月的文章,当然要带来更加给力点的内容了,那么话不多说,赶快进入到今天的正题吧. 说 到图片轮播器,很多的Android应用中都会带有这个功能,比如说网易新闻.淘宝等.最新我们公司的一款应用也加入了这个功能,并且在图片轮播的基础上 还增加了三维立体

选项卡例题效果和图片轮播效果例题

一.选项卡效果   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <html xmlns="http://www.w3.org/1999/xhtml">   <head>   <meta http-equi

Js效果:图片轮播;选项卡;侧面菜单下拉效果;进度条效果;滑动效果;好友列表选中效果;点击选中显示效果

选项卡效果表: <body><div id="aaa"> <div class="bbb" style="width:50px; height:30px; background-color:#3F0" onclick="Show('d1')">娱乐</div> <div class="bbb" style="width:50px; height

css3爆炸效果更换图片轮播图

思路:给一个div设置一个背景图片1.jpg,然后在这个div上面用两个for循环动态的创建一个列数为C行数为R数量的span,并给这些span设置宽高.定位并设置背景图片0.jpg,然后设置每个span的background-position,使这组span平铺在div上.当点击div时换图,换图的实现方法是循环每个span,以div的宽度的中线为定位线,让这组span随机进行transform,然后在结束的时候让span的透明度变为透明,并且瞬间拉回全部span到原始位置并更换span和di

实现一个图片轮播-3d播放效果

前言:最近在做一个音乐播放器,首页要做一个图片轮播,看了bootstrap的carousel插件以及移动端的swipe.js库,都是平面图片轮播的效果,所以自己想着实现类似网易云app里那种3d图片轮播的效果,所以写下此文 使用方法: 首先,引入Swipe.js和Swipe.css 定义轮播列表ul[data-ride="swipe"],然后每一个轮播项都加上类 class="item" : 1 <!DOCTYPE html> 2 <html la

css3实践之摩天轮式图片轮播+3D正方体+3D标签云(perspective、transform-style、perspective-origin)

本文主要通过摩天轮式图片轮播的例子来讲解与css3 3D有关的一些属性. demo预览: 摩天轮式图片轮播(貌似没兼容360 最好用chrome) 3D正方体(chrome only) 3D标签云(css3版 chrome only) 3D标签云(js版 chrome only) 前文回顾 在前面的文章css3实践之图片轮播(Transform,Transition和Animation)中我们简单地了解了css3旗下的transform.transition以及animation.回顾一下,tr

CSS3图片轮播效果

原文:CSS3图片轮播效果 在网页中用到图片轮播效果,单纯的隐藏.显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间.css3的出现,让动画变得不再是问题,而且简单易用.下面介绍我用css3与js写的一个图片轮播效果. 一般图片轮播就是三四张图片: <div class="wrap"> <div class="carousel"> <div><img src="http://

UIScrollView实现图片轮播器及其无限循环效果

图片轮播器: 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController () <UIScrollViewDelegate> 4 @property (weak, nonatomic) IBOutlet UIScrollView *scrollview; 5 /** 6 * 页码 7 */ 8 @prop

图片轮播效果

今天有点空,写了个图片轮播的效果,使用了jq,直接上代码吧. 效果:http://edwardzhong.github.io/blog/2014/10/31/slidePics.html html如下: <div class="wrap"> <div class="left fl"><</div> <div class="right fr">></div> <div c