• javascript动画效果之任意效果任意值


    通过学习,我发现当同一个ul下的li标签如果想要不同的效果,那怎么办?

    比如第一个li是width变化,第二个li为透明度(opacity)变化,而opacity的值和width的值类型不同,不能通用那怎么办?

    而设置两个函数,只为了,两个值变化就显得太过麻烦,通过学习,我发现可以通过一些方法来实现

    代码如下

     1 <!DOCTYPE html>
     2 <html>
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <title>Document</title>
     7     <style type="text/css">
     8         * {
     9             margin: 0;
    10             padding: 0;
    11             font-size: 12px;
    12         }
    13         
    14         li {
    15             list-style: none;
    16             width: 200px;
    17             height: 100px;
    18             margin: 10px;
    19             background: pink;
    20             border: 1px solid blue;
    21             filter: alpha(opacity: 30);
    22             opacity: 0.3;
    23         }
    24     </style>
    25 </head>
    26 
    27 <body>
    28 
    29     <ul id="show">
    30         <li id="btn1"></li>
    31         <li id="btn2"></li>
    32     </ul>
    33 
    34 
    35     
    36 </body>
    37 
    38 </html>

    js部分用了一些新的方法,可以看注释,还不清楚可以自行百度

     1 <script type="text/javascript">
     2         function $(id) {
     3             return typeof id === "string" ? document.getElementById(id) : id;
     4         }
     5         window.onload = function() {
     6 
     7             var btn1 = $("btn1");
     8             var btn2 = $("btn2");
     9             var speed = 0;
    10 
    11             btn1.onmouseenter = function() {
    12                 changeBtn(this, 'width', 400);
    13             }
    14 
    15             btn1.onmouseleave = function() {
    16                 changeBtn(this, 'width', 200);
    17             }
    18 
    19             btn2.onmouseenter = function() {
    20                 changeBtn(this, 'opacity', 100);
    21             }
    22 
    23             btn2.onmouseleave = function() {
    24                 changeBtn(this, 'opacity', 30);
    25             }
    26 
    27             //obj为当前的鼠标所指向的标签
    28             //stChg为对应的变量样式
    29             //chgWid为需要改变的值
    30             function changeBtn(obj, stChg, chgWid) {
    31                 clearInterval(obj.timer);
    32 
    33                 obj.timer = setInterval(function() {
    34                     //chg这个变量本来为长度,宽度,或者透明度什么的
    35                     //但是现在通过一个getStyle()函数来获取
    36                     var chg = 0;
    37                     //进入函数,需要先判定是否透明度样式
    38                     if (stChg == 'opacity') {
    39                         //为真,则执行parseFloat()此方法返回的是浮点数
    40                         chg = Math.round(parseFloat(getStyle(obj, stChg)) * 100);
    41                     } else {
    42                         //为假,则执行parseInt()此方法返回的是整数
    43                         chg = parseInt(getStyle(obj, stChg));
    44                     }
    45                     //判定初始值(chg)是否小于输入值(chgWid)
    46                     if (chg < chgWid) {
    47                         speed = 10;
    48                     } else {
    49                         speed = -10;
    50                     }
    51                     //console.log(speed);
    52                     if (chg == chgWid) {
    53                         //相等时候,则清楚定时器
    54                         clearInterval(obj.timer);
    55                     } else {
    56                         //不相等时,则先进性判定样式是否为特殊样式opacity
    57                         if (stChg == 'opacity') {
    58                             //为真,对应其他浏览器,则执行(chg+speed)=当前样式的值+speed
    59                             //比如开始是(30+10),那么下一次就为(40+10)
    60                             obj.style.opacity = (chg + speed) / 100;
    61                             //为真,对应的ie浏览器,方法同上
    62                             obj.style.filter = 'alpha(opacity: ' + (chg + speed) + ')';
    63                         } else {
    64                             //为假则为普通样式取值,stChg为width时style[width]=style.width
    65                             obj.style[stChg] = chg + speed + 'px';
    66                         }
    67                     }
    68                 }, 30);
    69             }
    70 
    71 
    72             //这个函数返回的是一个值,例如attr传参为width
    73             //为真时obj.currentStyle[attr]=200
    74             function getStyle(obj, attr) {
    75                 if (obj.currentStyle) {
    76                     //currentStyle获取样式的值,对应的是ie浏览器
    77                     return obj.currentStyle[attr];
    78                 } else {
    79                     //同理,对应的是其他浏览器
    80                     return getComputedStyle(obj, false)[attr];
    81                 }
    82             }
    83 
    84         }
    85     </script>
  • 相关阅读:
    Linux查看文件被哪个进程占用
    命令行启动rstudio server
    Spring Boot配置文件及多环境配置
    Spring Boot yml配置文件
    js实现自定义概率抽奖算法
    Flutter之adb: failed to install apk的解决方法
    Flutter之不简单的搜索条
    git操作之commit规范
    Flutter之毛玻璃效果的实现
    固定定位下div水平居中
  • 原文地址:https://www.cnblogs.com/WhiteM/p/6026628.html
Copyright © 2020-2023  润新知