纯JS实现fadeIn 和fadeOut

CSS相关透明度的设置方式

  1. filter:alpha(opacity=50);
  2. opacity: 0.5;

opacity: 0.5 This is the “most important” one because it is the current standard in CSS. This will work in most versions of Firefox, Safari, and Opera. This would be all you need if all browsers supported current standards. Which, of course, they don’t. 
filter: alpha(opacity=50) This one you need for IE.

js实现fadeOut, fadeIn, fadeTo

    • 参考网址 http://mrthink.net/js-fadeIn-fadeOut-fadeTo/
    • 思路:主要的思路就是通过setTimeout函数来设置实时操作,通过每隔一段时间来减小/增加相关元素的透明度从而实现其淡入与淡出的效果
    • 代码如下:
    • function setOpacity(elem, opacity) {
          /*
           * elem : The id of the element;
           * opacity: The value of alpha, which is a decimals.
           */
          if(elem.style.filter) {   //IE
              elem.style.filter = ‘alpha(opacity:‘ + opacity * 100 + ‘)‘;
          } else {
              elem.style.opacity = opacity;
          }
      }
      /*
      function getOpacity(elem) {
          return (elem.style.filter ? elem.style.filter)
      }*/
      function fadeIn(elem, speed) {
          /*
           * elem, the id of the element;
           * speed, the speed for the fadeIn.(The value lower, the less time needs)
           * opacity, the target opacity will be reach, 0.0 to 1.0
           */
           elem.style.display = "block";
           setOpacity(elem, 0);
      
           var tempOpacity = 0;
           (function(){
               setOpacity(elem, tempOpacity);
               tempOpacity += 0.05;
               if(tempOpacity <= 1) {
                   setTimeout(arguments.callee, speed);
                   //tempOpacity += 0.05;
               }
           })();
      }
      
      function fadeOut(elem, speed) {
          /*
           * elem, the id of the element;
           * speed, the speed for the fadeout;
           speed, the speed for the fadein.(The value lower, the less time needs);
           */
           elem.style.display="block";
           var tempOpacity = 1;
           (function(){
               setOpacity(elem, tempOpacity);
               tempOpacity -= 0.05;
               if(tempOpacity > 0) {
                   setTimeout(arguments.callee, speed);
                   console.log("why");
               } else {
                   elem.style.display = "none"; //不可放在匿名函数外面会先执行。
               }
           })();
           //elem.style.display = "none";
      }
      
      function fadeTo(elem, speed, opacity){
          /* elem, the id of the element;
           * speed, the speed to of the fadeTo.(The value lower, the less time needs)
           * opacity, the opacity of the final result;
           */
           var tempOpacity = 0;
           elem.style.display = "block";
           (function(){
               setOpacity(elem, tempOpacity);
               tempOpacity += 0.05;
               if(tempOpacity <= opacity) {
                   setTimeout(arguments.callee, speed);
               }
           })();
      }
    • 这里需要有一个值得注意的,就是在设置定时修改透明度时,这里利用了JS的闭包性质。以图中fadeOut代码为例说明,在这个代码的运行过程中,在fadeOut函数中定义了一个内部的匿名函数来实现定时减小透明度,在匿名函数内部,使用setTimeout来定时的调用匿名函数(arguments.callee,注意这里的arguments的作用域是匿名函数,不是fadeOut),这个方法看似递归调用了匿名函数,但是实际上解析器并不是这样处理的。当fadeOut函数触发时,运行的过程是:fadeOut函数入栈执行--->匿名函数入栈执行--->匿名函数出栈--->fadeOut函数出栈--->设置的时间到了,匿名函数入栈--->匿名函数出栈--->设置的时间到,匿名函数入栈……;从效率上来看,这样的过程是更好的,因为减小的函数栈的压力;同时也可以看到JS闭包的性质了,因为虽然定义tempOpacity的函数fadeOut出栈了,但是后来的匿名还是可以访问到这个变量。这主要是因为虽然fadeOut函数返回了,其执行环境的作用域链被销毁了, 但是其活动对象(由每个函数的arguments和其他命名参数来初始化得到的)仍然会留在内在中,因为匿名函数中有引用到这个对象(js的内存管理是使用垃圾回收机制的),所以匿名函数也就可以使用这个对象里面的变量了,只有当匿名函数被销毁时,其活动对象才会被销毁。
时间: 2024-10-10 08:00:55

纯JS实现fadeIn 和fadeOut的相关文章

原生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;

利用jquery的淡入淡出函数(fadeIn和fadeOut)--实现轮播

首先说下,我在网上找的例子全是用的UL 实现,其实大可不必,只要是能包含img标签的HTML标签都可以做轮播效果.利用jquery的淡入淡出函数(fadeIn和fadeOut).废话也不多说,边上代码边讲解.最后附上demo效果地址. <!--整体容器-->    <div class="imgbox">        <!--图片列表,除第一张显示外,其余隐藏-->        <ul>            <li style

jQuery效果-----fadeIn()、fadeOut()、fadeToggle()、fadeTo()

fadeIn(),fadeOut(),fadeToggle(),fadeTo() fadeIn()-----淡入已经隐藏的元素(把隐藏的被选元素渐渐显示出来). 语法:$(selector).fadeIn(speed,callback); 可选的 speed 参数规定效果的时长,可以是:"slow"."fast" 或毫秒. 可选的 callback 参数是 该fadeIn()完成后所执行的函数名称. fadeOut()----淡出可见的元素(把可见的被选元素渐渐隐藏

210 jQuery淡入淡出:fadeIn() 、fadeOut() 、fadeToggle() 、fadeTo()

淡入淡出动画,常见有四个方法:fadeIn() .fadeOut() .fadeToggle() .fadeTo() ? 语法规范如下: 代码演示 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initi

纯js实现html转pdf

项目开发中遇到了一个变态需求,需要把一整个页面导出为pdf格式,而且要保留页面上的所有的表格.svg图片和样式.简而言之,就是希望像截图一样,把整个页面截下来,然后保存成pdf.咋不上天呢--查了一下,能够实现html转pdf的方法还是挺多的,大概有以下几种:1.大部分浏览器就有这个功能.然而我们客户要的可不是这个,人家要的是能够在系统中主动触发的导出为pdf功能,所以这种方案pass.2.利用第三方工具.我找到了一种利用wkhtmltopdf这种工具来导出的方案,自己在我们的项目中试了一下,效

Highcharts纯js图表库,以后可以跟客户说,你跟阿里云ECS用的图表库是同款

Highcharts是一款纯javascript编写的图表库,能够很简便的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达18种不同类型的图表,可以满足常用的Web图表需求 ! 近来维护我的阿里云服务器,进入后台偶然发现阿里云管理后台数据图表用的也是Highcharts,刚好正需要WEB端展示数据的东西,研究哈… Highcharts官网:http://www.highcharts.com Highcharts中文站:ht

纯js页面跳转整理

js方式的页面跳转1.window.location.href方式    <script language="javascript" type="text/javascript">           window.location.href="http://updn.cn";     </script>2.window.navigate方式跳转   <script language="javascript

纯js制作的弹球游戏

纯js的弹球游戏,撞壁自动返回,按钮放置暂停移动,移开开始移动 1 <!-- 2 author:zhangjie 3 date :2016-7-23 4 --> 5 <!DOCTYPE html> 6 <html> 7 <head> 8 <title></title> 9 <meta charset="UTF-8"> 10 <script type='text/javascript'> 11

[分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技

好久没有写博客了,想到2年前答应要放出源代码的也没放出来,最近终于有空先把纯js实现无限空间大小的本地存储的功能开源了,项目地址https://github.com/xueduany/localstore,demo见http://xueduany.github.io/localstore/,下面给大家简单说说大概原理,具体细节和异常处理后面有机会在单独说 先说下突破本地localStorage的原理,官方原话是这么说的http://www.w3.org/TR/2013/PR-webstorage