• 颗粒翻页(css3效果展示)


     用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{700px;
            height: 400px;
            margin:50px auto;
            position: relative;
        }
        #box span{
            position: absolute;
             100%;
            height: 100%;
            transition:1s all ease;
            transform:rotateY(0deg);
            transform-style:preserve-3d;
        }
        #box span em{
             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>
    

      

  • 相关阅读:
    AndRodi Strudio中的按钮时件
    Intent(三)向下一个活动传递数据
    Intent(二)隐式调用intent
    用PopupWindow做下拉框
    环形进度条
    Android Studio分类整理res/Layout中的布局文件(创建子目录)
    Android无需申请权限拨打电话
    使用ViewPager切换Fragment时,防止频繁调用OnCreatView
    定制 黑色描边、白色背景、带圆角 的背景
    Android 底部弹出Dialog(横向满屏)
  • 原文地址:https://www.cnblogs.com/jasonwang2y60/p/5986564.html
Copyright © 2020-2023  润新知