原生JS封装淡入淡出效果函数步骤详解

这次给大家带来原生JS封装淡入淡出效果函数步骤详解,原生JS封装淡入淡出效果函数的注意事项有哪些,下面就是实战案例,一起来看一下。

说到js的渐变显示与消失,多数朋友会想到JQuery里面的fadeIn()、fadeOut()或fadeToggle()。但如果仅仅是为了引入这样的一个效果,而去调用了庞大JQuery库?或者说我通过用原生js实现一些函数来提高自己~

所以,我简单的研究了一下纯js代码写淡入淡出的效果。

如果出现错误,请在评论中指出,我也好自己纠正自己的错误

原生JS封装淡入淡出效果函数步骤详解 

(一)FadeIn淡入函数

淡入淡出的效果,其实就是一个setInterval(),加上循环的DOM操作,通过改变element对象节点的透明度,即可实现这种效果。

所以我们提取出两个必要的东西:setInterval()、opacity、以及speed。

speed : 这个是我们设置opacity的值从0到1的float数值变化速度

淡入的逻辑:opacity的值从0到1的float数值变化。

我们来先看代码实现!

html:

123

登录后复制

css样式

 p {  width: 100px;  height: 100px;  background-color: #1d7db1;  opacity:0; } 

登录后复制

首先我们来看fadeIn函数的第一版的写法:先了解一下实现的思路

function fadeIn(ele, speed) {  let num = 0;  let time = setInterval(() => {    num += speed;    ele.style.opacity = num / 100;    if (num >= 100) {     clearInterval(time); // 清楚定时器    }  }, 30);  }}

登录后复制

当这个效果暂时实现以后,有些东西并没有那么简单。如果发生多次的触发效果,会出现setInterval被多次同时使用,出现一些让人头疼的BUG。

要解决这个问题,目前有一个方案:添加一个全局状态,防止多次触发setInterval。

let Fadeflag = true;function fadeIn(ele, speed) {  let num = 0;  if (Fadeflag) {  let time = setInterval(() => {    num += speed;    Fadeflag = false;    ele.style.opacity = num / 100;    if (num >= 100) {     clearInterval(time);     Fadeflag = true;    }  }, 30);  }}

登录后复制

兼容性问题!!!

先看代码

set: function(elem, num) {  elem.style.opacity !== undefined ? elem.style.opacity = num / 100 : elem.style.filter = 'alpha(opacity = '+ num +')';}

登录后复制

注:代码设置num/100是因为我们以ie为标准去兼容ff和GG

js里面设置DOM节点透明度的函数属性:filter= “alpha(opacity=” + value+ “)”(兼容ie)

ie的filter范围是0~100

opacity=value/100(兼容FF和GG)。

FF和GG的opacity是0~1 (为了兼容ie的filter范围,我们用num/100)

(二)FadeOut淡出函数

speed : 这个是我们设置opacity的值从1到0的float数值变化速度(记得考虑兼容性)

淡出的逻辑:opacity的值从1到0的float数值变化。

封装函数

(function() {  let fadeFlag = true;  function Fade(selector) {    this.elem = typeof selector == 'Object' ? selector : document.getElementById(selector);  }  Fade.prototype = {   constructor: Fade,    setOpacity: (elem, opacity) => { // 兼容ie10—      elem.filters ? elem.style.filter = 'alpha(opacity = '+ opacity +')':  elem.style.opacity = opacity / 100;      return true;   },   setOpacity: function(num) {      this.elem.style.opacity !== undefined ? this.elem.style.opacity = num / 100 : this.elem.style.filter = 'alpha(opacity = '+ num +')';   },    fadeIn: function(speed, opacity){   /*   speed ==>淡入的速度,正整数(可选);   opacity ==>淡入到指定的透明度,0~100(可选);      */      speed = speed || 2;      opacity = opacity || 100;      let num = 0; // 初始化透明度变化值为0      if (fadeFlag) {        let time = setInterval(() => {          num += speed;          fadeFlag = false;          this.setOpacity(num);          this.elem.style.opacity !== undefined ? this.elem.style.opacity = num / 100 : this.elem.style.filter = 'alpha(opacity = '+ num +')';          if (num >= opacity) {            clearInterval(time);            fadeFlag = true;          }        }, 20);      }    },    fadeOut: function(speed, opacity) {   /*   speed ==>淡入的速度,正整数(可选);   opacity ==>淡入到指定的透明度,0~100(可选);   */      speed = speed || 2;      opacity = opacity || 0;      let num = 100; // 初始化透明度变化值为0      if (fadeFlag) {        let time = setInterval(() => {          num -= speed;          fadeFlag = false;          this.set(num);          this.elem.style.opacity !== undefined ? this.elem.style.opacity = num / 100 : this.elem.style.filter = 'alpha(opacity = '+ num +')';          if (num <= opacity) {          clearInterval(time);          fadeFlag = true;          }        }, 20);      }    }  };window.Fade = Fade;})();

登录后复制

测试实例:

let btn = document.getElementsByTagName('button')[0]; let btn2 = document.getElementsByTagName('button')[1]; btn.onclick = () => {  let fade = new Fade('p1'); fade.fadeIn(); }; btn2.onclick = () => {  let fade = new Fade('p1');  fade.fadeOut(); }

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

react-native封装插件swiper使用步骤详解

FIFO/LRU实现缓存算法

以上就是原生JS封装淡入淡出效果函数步骤详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2762971.html

(0)
上一篇 2025年3月8日 10:04:49
下一篇 2025年2月26日 01:23:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • p5.js键盘交互函数总结

    这次给大家带来p5.js键盘交互函数总结,使用p5.js键盘交互函数的注意事项有哪些,下面就是实战案例,一起来看一下。 一、键盘交互相关关键词与函数 keyIsPressed: 关键词,按下按键时为true,反之为false keyCode…

    编程技术 2025年3月8日
    200
  • JS原型与原型链使用详解

    这次给大家带来JS原型与原型链使用详解,JS原型与原型链使用的注意事项有哪些,下面就是实战案例,一起来看一下。 我们创建的每个函数都有一个 prototype (原型)属性,这个属性是一个指针,指向一个原型对象,而这个原型对象中拥有的属性和…

    2025年3月8日
    200
  • JS字符串的操作详解

    这次给大家带来JS字符串的操作详解,JS字符串操作的注意事项有哪些,下面就是实战案例,一起来看一下。 charAt()            获取字符串中特定索引处的字符; toupperCase()  将字符串的所有字符转换成大写字母; …

    编程技术 2025年3月8日
    200
  • js中DOM事件绑定使用小技巧

    这次给大家带来js中DOM事件绑定使用小技巧,js中DOM事件绑定使用的注意事项有哪些,下面就是实战案例,一起来看一下。 js事件绑定 JavaScript 有三种事件模型: 内联模型 脚本模型 DOM2 模型 1、内联模型 //基本废除不…

    编程技术 2025年3月8日
    200
  • js解析数据技巧总结

    这次给大家带来js解析数据技巧总结,js解析数据的注意事项有哪些,下面就是实战案例,一起来看一下。 自从有了前后端分离,一些后端小伙伴给出的数据结构也来越混乱了。以为分离减轻了他们的负担接口的质量会非常高但是人的惰性却体现的很“完美”。 由…

    编程技术 2025年3月8日
    200
  • vue.js路由失效无法使用

    这次给大家带来vue.js路由失效无法使用,解决vue.js路由失效无法使用的注意事项有哪些,下面就是实战案例,一起来看一下。 新学了vue.js中的路由 在之前写的vue的demo上加上了简单的路由例子(来自vue-router 2),但…

    编程技术 2025年3月8日
    200
  • JS给动态创建元素添加事件步骤详解

    这次给大家带来JS给动态创建元素添加事件步骤详解,JS给动态创建元素添加事件的注意事项有哪些,下面就是实战案例,一起来看一下。 html中直接生成的元素,添加事件,我们都知道,但是如何为一个动态生成的元素添加事件呢,jquery中的live…

    2025年3月8日
    200
  • nodejs生成二维码(最简洁)

    这次给大家带来nodejs生成二维码(最简洁),nodejs生成二维码的注意事项有哪些,下面就是实战案例,一起来看一下。 一开始使用node-qrcode(注意事项github.com/soldair/node-qrcode),结果安装的时…

    编程技术 2025年3月8日
    200
  • p5.js鼠标交互如何实现并使用

    这次给大家带来p5.js鼠标交互如何实现并使用,p5.js鼠标交互实现并使用的注意事项有哪些,下面就是实战案例,一起来看一下。 一、鼠标交互常用关键词 p5.js提供了许多鼠标操作用的关键词与函数,常用的有: mouseIsPressed:…

    编程技术 2025年3月8日
    200
  • JS匿名自执行函数概念与使用说明

    这次给大家带来JS匿名自执行函数概念与使用说明,JS匿名自执行函数概念与使用的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: //匿名函数的第一种情形 v…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论