Home > Article > Web Front-end > JavaScript natively encapsulates a function test example code for fade-in and fade-out effects
This article mainly introduces the function of javascript native encapsulation of a fade-in and fade-out effect. There are mainly FadeIn fade-in function and FadeOut fade-out function. Friends in need can refer to the following
Speaking of the gradient display and disappearance of js, Most friends will think of fadeIn(), fadeOut() or fadeToggle() in JQuery. But what if the huge JQuery library is called just to introduce such an effect? In other words, I improved myself by using native js to implement some functions~
So, I briefly studied the effect of writing fade-in and fade-out in pure js code.
If there is an error, please point it out in the comments so that I can correct my own mistakes
(1) FadeIn Function
The fade-in and fade-out effect is actually a setInterval(), coupled with cyclic DOM operations, this effect can be achieved by changing the transparency of the element object node.
So we extract two necessary things: setInterval(), opacity, and speed.
speed: This is the float value change speed when we set the opacity value from 0 to 1.
The logic of fading in: the opacity value changes from 0 to 1. Float value changes from 0 to 1.
Let’s look at the code implementation first!
html:
<p id="p1"></p> <span id="span1">123</span> <button>fadein</button> <button>fadeOut</button>
css style
<style> p { width: 100px; height: 100px; background-color: #1d7db1; opacity:0; } </style>
First of all, let’s look at how to write the first version of the fadeIn function: first understand the idea of implementation
function fadeIn(ele, speed) { let num = 0; let time = setInterval(() => { num += speed; ele.style.opacity = num / 100; if (num >= 100) { clearInterval(time); // 清楚定时器 } }, 30); } }
When this effect is temporarily achieved, some things are not that simple. If multiple trigger effects occur, setInterval will be used multiple times at the same time, causing some troublesome BUGs.
To solve this problem, there is currently a solution: add a global state to prevent setInterval from being triggered multiple times.
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); } }
Compatibility issue! ! !
Look at the code first
set: function(elem, num) { elem.style.opacity !== undefined ? elem.style.opacity = num / 100 : elem.style.filter = 'alpha(opacity = '+ num +')'; }
Note: The code sets num/100 because we use ie as the standard to be compatible with ff and GG
js to set the function attribute of DOM node transparency :filter= "alpha(opacity=" value ")" (compatible with ie)
The filter range of ie is 0~100
opacity=value/100 (compatible with FF and GG).
The opacity of FF and GG is 0~1 (in order to be compatible with the filter range of ie, we use num/100)
(2) FadeOut function
speed: This is the speed at which the float value changes when we set the opacity value from 1 to 0 (remember to consider compatibility)
Fade out logic: the opacity value changes from 1 to 0 The float value changes.
Encapsulation function
(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; })();
Test example:
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(); }
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
Five common JavaScript functions
Angular study notes examples of integrating third-party UI frameworks and controls
Node.js Example of Method to Implement Registration Email Activation Function
The above is the detailed content of JavaScript natively encapsulates a function test example code for fade-in and fade-out effects. For more information, please follow other related articles on the PHP Chinese website!