异形滚动

Posted 六月June June

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异形滚动相关的知识,希望对你有一定的参考价值。

效果:

让着几张图片依次变化滚动:






原理

异形滚动的原理------>0123

让第一个元素在第一个位置,第二个元素在第二个位置,以此类推...

通过改变元素的身份(改变元素在元素数组中的位置),来实现异性滚动

右按钮:向末尾添加删除的第一个元素:

那么第二个元素就成为了第一个元素,占领了第一个位置,

第三个元素就成为了第二个元素,占领了第二个位置

...

多次点击右按钮元素变化情况[0123]--[1230]--[2301]--[3012]--[0123]

左按钮:向头部添加删除的最后一个元素:----->3012

那么最后一个元素就成为了第一个元素,占领了第一个位置

第一个元素就成为了第二个元素,占领了第二个位置

...

多次点击左按钮元素变化[0123]--[3012]--[2301]--[1230]--[0123]



参考代码:

<!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" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>异形滚动</title>
    <style type="text/css">
        *
            margin: 0;
            padding: 0;
        
        .box
            width: 670px;
            height: 221px;
            background: url(images/number/pic_bg.gif);/* 背景图图片 */
            margin: 100px auto;
            border: 1px solid #000;
            position: relative;
            overflow:hidden;
        
        .box ul
            list-style: none;
        
        .box ul li
            position: absolute;
            opacity: 1;
            filter:alpha(opacity=100);
        
        /*img这个元素不会根据父亲来设置宽度、高度,所以我们就要写:*/
        .box ul li img
            width: 100%;
            height: 100%;
        
        /* 设置默认的图片位置和宽高 */
        .box ul li.state0width: 55px;height: 37px;left:-55px;top: 84px;opacity: 0; filter:alpha(opacity=0);
        .box ul li.state1width: 71px;height: 54px;left:16px;top: 67px;
        .box ul li.state2width: 122px;height: 86px;left:104px;top: 35px;
        .box ul li.state3width: 161px;height: 112px;left:247px;top: 16px;
        .box ul li.state4width: 122px;height: 86px;left:436px;top: 35px;
        .box ul li.state5width: 71px;height: 54px;left:583px;top: 67px;
        .box ul li.state6width: 55px;height: 37px;left:678px;top: 84px;opacity: 0; filter:alpha(opacity=0);

        /* 左按钮 */
        .leftBtn
            position: absolute;
            top: 151px;
            left: 20px;
            width: 40px;
            height: 40px;
            background-color: red;
        
        /* 右按钮 */
        .rightBtn
            position: absolute;
            top: 151px;
            right: 20px;
            width: 40px;
            height: 40px;
            background-color: red;
        

    </style>
</head>
<body>
    <div class="box" id="box">
        <!-- 图片列表 -->
        <ul>
            <li class="state0"><img src="images/number/0.png" alt="" /></li>
            <li class="state1"><img src="images/number/1.png" alt="" /></li>
            <li class="state2"><img src="images/number/2.png" alt="" /></li>
            <li class="state3"><img src="images/number/3.png" alt="" /></li>
            <li class="state4"><img src="images/number/4.png" alt="" /></li>
            <li class="state5"><img src="images/number/5.png" alt="" /></li>
            <li class="state6"><img src="images/number/6.png" alt="" /></li>
        </ul>
        <!-- 右按钮 -->
        <div class="btns">
            <a href="javascript:;" id="leftBtn" class="leftBtn"></a>
            <a href="javascript:;" id="rightBtn" class="rightBtn"></a>
        </div>
    </div>

    <!-- 运动框架 -->
    <script type="text/javascript" src="JSs/animate-2.0.1.js"></script>
    <!-- 得到计算后样式的 -->
    <script type="text/javascript" src="JSs/fetchComputedStyle.js"></script>
    <script type="text/javascript">

        //得到元素
        var box = document.getElementById("box");
        var rightBtn =  document.getElementById("rightBtn");
        var leftBtn =  document.getElementById("leftBtn");
        var lis = document.getElementsByTagName("li");//图片li的类数组
        //注意:getElementsByTagName得到的是类数组,不能使用数组的方法,所以需要转化成数组
        var lisArray = [];
        var JsonArr = [];

        var animatedTime = 600;
        var tween = "BounceEaseOut";

        //填充数组
        for(var i = 0 ; i < lis.length; i++)
            JsonArr.push(
                "width"     : parseInt(fetchComputedStyle(lis[i],"width")),
                "height"    : parseInt(fetchComputedStyle(lis[i],"height")),
                "left"  : parseInt(fetchComputedStyle(lis[i],"left")),
                "top"   : parseInt(fetchComputedStyle(lis[i],"top")),
                "opacity" : parseInt(fetchComputedStyle(lis[i],"opacity"))
            );
            lisArray.push(lis[i]);
        

        //右按钮事件监听
        rightBtn.onclick = rightBtnHandler;

        var timer = setInterval(rightBtnHandler,1500);//一开始就轮播
        box.onmouseover = function()clearInterval(timer);//鼠标进入停止
        box.onmouseout = function()timer = setInterval(rightBtnHandler,1000);//鼠标离开继续轮播

        //右按钮事件函数
        function rightBtnHandler()
            if(lisArray[1].isanimated)return;//函数节流
            for(var i = 1;i <=lisArray.length-1;i++)//i不能从0开始
                animate(lisArray[i],JsonArr[i-1],animatedTime,tween);
            
            //让第一个元素瞬移到末尾处
           for(var k in JsonArr[lisArray.length-1])
                lisArray[0].style[k] = JsonArr[lisArray.length-1][k]+"px";
           
            // 交换身份(改变元素在数组中的位置)
           lisArray.push(lisArray.shift());//向末尾添加删除的第一个元素
        

        //左按钮的监听:
        leftBtn.onclick = function()
            if(lisArray[1].isanimated)return;
            for(var i = 0 ; i <= lisArray.length-2 ; i++)
                animate(lisArray[i],JsonArr[i + 1],animatedTime,tween);
            
            //让最后一个元素瞬移到开始处
            for(var k in JsonArr[0])
                lisArray[lisArray.length-1].style[k] = JsonArr[0][k] + "px";
            
            //交换身份!!
            lisArray.unshift(lisArray.pop());
        
    </script>
</body>
</html>



以上是关于异形滚动的主要内容,如果未能解决你的问题,请参考以下文章

Android 屏幕适配异形屏适配 ② ( 需要异形屏适配情况 | 需要异形屏适配的 Android 系统版本 | 刘海屏状态判定 | 异形屏适配调试 - 华为云调试 )

Android 屏幕适配异形屏适配 ① ( 异形屏类型:刘海屏水滴屏挖孔屏 | 沉浸式布局刘海屏适配 | 华为手机异形屏适配注意点 )

Android 屏幕适配异形屏适配 ① ( 异形屏类型:刘海屏水滴屏挖孔屏 | 沉浸式布局刘海屏适配 | 华为手机异形屏适配注意点 )

[Unity 3d] 异形屏UI布局解决方案 - NotchSolution

Png异形窗口

Windows界面编程第四篇 异形窗体(转)