zoukankan      html  css  js  c++  java
  • 原生js实现fadein 和 fadeout

             js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。

             先来看看设置透明度的兼容性代码:

    function setOpacity(ele, opacity) {
        if (ele.style.opacity != undefined) {
            ///兼容FF和GG和新版本IE
            ele.style.opacity = opacity / 100;
    
        } else {
            ///兼容老版本ie
            ele.style.filter = "alpha(opacity=" + opacity + ")";
        }
    }

    关于有的小伙伴这样写:

    function setOpacity(ele, opacity) {
        if (document.all) {
            ///兼容ie
            ele.style.filter = "alpha(opacity=" + opacity + ")";
        }
        ele {
            ///兼容FF和GG
            ele.style.opacity = opacity / 100;
        }
    }

    我想说这样在IE10下运行有问题,点了之后没反应。因为IE10支持opacity属性不支持filter了,这个方法不可取。

    fadein   函数代码:

    function fadein(ele, opacity, speed) {
        if (ele) {
            var v = ele.style.filter.replace("alpha(opacity=", "").replace(")", "") || ele.style.opacity;
            v < 1 && (v = v * 100);
            var count = speed / 1000;
            var avg = count < 2 ? (opacity / count) : (opacity / count - 1);
            var timer = null;
            timer = setInterval(function() {
                if (v < opacity) {
                    v += avg;
                    setOpacity(ele, v);
                } else {
                    clearInterval(timer);
                }
            }, 500);
        }
    }

    fadeout   函数代码:

    function fadeout(ele, opacity, speed) {
        if (ele) {
            var v = ele.style.filter.replace("alpha(opacity=", "").replace(")", "") || ele.style.opacity || 100;
            v < 1 && (v = v * 100);
            var count = speed / 1000;
            var avg = (100 - opacity) / count;
            var timer = null;
            timer = setInterval(function() {
                if (v - avg > opacity) {
                    v -= avg;
                    setOpacity(ele, v);
                } else {
                    clearInterval(timer);
                }
            }, 500);
        }
    }

    下面给一个demo示例:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
    <script type="text/javascript" src="fade.js"></script>
        <script type="text/javascript">
             
            window.onload = function () {
    
    
                document.getElementById('Button1').onclick = function () {
    
                    fadeout(document.getElementById('DV'), 0, 6000);
    
                }
                document.getElementById('Button2').onclick = function () {
    
                    fadein(document.getElementById('DV'), 80, 6000);
    
                }
            }
        </script>
    </head>
    <body>
    
        <div id="DV" style="background-color: green;  400px; height: 400px;"></div>
        <input id="Button1" type="button" value="button" />
        <input id="Button2" type="button" value="button" />
    
    </body>
    </html>

    有什么更好的实现方式可以留言。。。

  • 相关阅读:
    .net Core 使用AutoMapper
    文件批量生成IO流读写
    .net Core数据的幕等性
    .net core 拦截器的使用
    墙上你APP设计与实现
    H5 App实现热更新,不需要重新安装app
    支付宝支付接口的使用详细说明
    .net 数据源DataSet 转换成模型
    .net ajax跨域请求问题
    【系统之音】SystemUI篇(二)SysytemUI功能一览--草稿
  • 原文地址:https://www.cnblogs.com/a546558309/p/3737070.html
Copyright © 2011-2022 走看看