• javascript动画效果之多物体透明度


    html和css 仅为布局,需要注意的是filter对应的是老版本的ie浏览器透明度,而opacity对应的其他浏览器的透明度

    filter: alpha(opacity: 50);
    opacity: 0.5;
    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                font-size: 12px;
            }
            
            div {
                margin: 10px;
                height: 360px;
                width: 200px;
            }
            
            ul {
                list-style: none;
            }
            
            ul li {
                width: 200px;
                height: 100px;
                background: blue;
                margin-bottom: 20px;
                cursor: pointer;
                filter: alpha(opacity: 50);
                opacity: 0.5;
            }
        </style>
    </head>
    
    <body>
        <div>
            <ul id="squLi">
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    
        
    </body>
    
    </html>

    js部分也是通过for循环来给每个li标签都加入一个鼠标触发事件

     1 <script type="text/javascript">
     2         function $(id) {
     3             return typeof id === "string" ? document.getElementById(id) : id;
     4         }
     5         window.onload = function() {
     6             //自定义变量为li标签的集合
     7             var aLi = $("squLi").getElementsByTagName("li");
     8 
     9             //通过for循环给每个li都添加一个触发效果
    10             for (var i = 0; i < aLi.length; i++) {
    11                 //每个li都需要一个单独的定时器,避免冲突
    12                 aLi[i].timer = null;
    13                 //设置每一个li初始的透明度为50,避免冲突
    14                 aLi[i].alpha = 50;
    15                 //绑定事件
    16                 aLi[i].onmouseenter = function() {
    17                     //调用自定义函数,并传参(需要达到的透明度为100)
    18                     squartLi(this, 100);
    19                 }
    20                 //绑定事件
    21                 aLi[i].onmouseleave = function() {
    22                     //调用同一个自定义函数,传参(离开时透明度为50)
    23                     squartLi(this, 50);
    24                 }
    25             }
    26 
    27             //自定义函数,自定义参数obj和onAlpha
    28             function squartLi(obj, onAlpha) {
    29                 //一个li同一时间只需要一个定时器,所以事件触发时,要清除已经触发的定时器
    30                 clearInterval(obj.timer);
    31                 //定时器
    32                 obj.timer = setInterval(function() {
    33                     //鼠标进入obj.alpha为50,onAlpha为100,所以+10
    34                     if (obj.alpha < onAlpha) {
    35                         obj.alpha += 10;
    36                     } else {
    37                         //离开时,obj.alpha为100,onAlpha为50,所以-10
    38                         obj.alpha -= 10;
    39                     }
    40                     if (obj.alpha == onAlpha) {
    41                         //当为50或者100则达到要求,清除定时器
    42                         clearInterval(obj.timer);
    43                     } else {
    44                         //老版本ie
    45                         obj.style.filter = 'alpha(opacity: ' + obj.alpha + ');'
    46                         //其他浏览器
    47                         obj.style.opacity = obj.alpha / 100;
    48                     }
    49 
    50                 }, 30);
    51             }
    52 
    53         }
    54     </script>
  • 相关阅读:
    第k短路
    Codeforces Round #608 (Div. 2)
    Codeforces Round #606 E(无向图求pair(x,y)x到y的任意路径一定经过定点a和b的数量)
    Codeforces Round #603 (Div. 2)E
    题解报告:hdu 2717 Catch That Cow(bfs)
    题解报告:poj 3669 Meteor Shower(bfs)
    题解报告:poj 1321 棋盘问题(dfs)
    题解报告:hdu 1312 Red and Black(简单dfs)
    题解报告:poj 1426 Find The Multiple(bfs、dfs)
    hdu 4704 Sum(扩展欧拉定理)
  • 原文地址:https://www.cnblogs.com/WhiteM/p/6025371.html
Copyright © 2020-2023  润新知