一步一步教你写淡入淡出带注释的图片轮播插件(二)_javascript技巧
接上一篇,现在进行第二部分。
开始之前,还是说说前文提到的关于把所有函数都写在一个闭包内的优化问题。前文也提到了,因为我们在初始化的时候要调用的只是init,所以可以只把init写入闭包,其他功能函数作为init的原型继承方法来调用。所以前文的代码其实可以这样改写:
var Hongru={};
function H$(id){return document.getElementById(id)}
function H$$(c,p){return p.getElementsByTagName(c)}
Hongru.fader = function(){
function init(options){ //options参数:id(必选):图片列表父标签id;auto(可选):自动运行时间;index(可选):开始的运行的图片序号
var wp = H$(options.id), // 获取图片列表父元素
ul = H$$('ul',wp)[0], // 获取
li = this.li = H$$('li',ul);
this.a = options.auto?options.auto:2; //自动运行间隔
this.index = options.position?options.position:0; //开始运行的图片序号(从0开始)
this.l = li.length;
this.cur = this.z = 0; //当前显示的图片序号&&z-index变量
this.pos(this.index); //变换函数
}
init.prototype = {
auto:function(){
this.li.a = setInterval(new Function('Hongru.fader.move(1)'),this.a*1000);
},
move:function(i){//参数i有两种选择,1和-1,1代表运行到下一张,-1代表运行到上一张
var n = this.cur+i;
var m = i==1?n==this.l?0:n:nthis.pos(m); //变换到上一张或下一张
},
pos:function(i){
clearInterval(this.li.a);
this.z++;
this.li[i].style.zIndex = this.z; //每次让下一张图片z-index加一
this.cur = i; //绑定当前显示图片的正确序号
this.auto(); //自动运行
}
}
return {init:init}
}();
但是这样其实是有问题的,不知道大家发现没有,如果这样改写的话,在auto函数里就不能再调用‘Hongru.fader.move()'了,这是没定义的,那有人会说,既然是init的原型继承,那就调用'Hongru.fader.init.move()'不就对了吗?其实也不对,我在以前的文章中就讨论过这个问题http://www.cnblogs.com/hongru/archive/2010/10/09/1846636.html;init在没有实例化之前是访问不到它的prototype的,所以我们在这样做的时候要注意两个问题,
一个是初始化的时候要用new关键字对init实例化。
另外一个是在代码内部调用它的原型方法时也要通过我们实例化后的对象来调用,举个例子,比如我们对上面的代码初始化的时候应该是这样的
var newFader = new Hongru.fader.init({ //这个new很重要
id:'fader'
});
如果我们在代码里要调用init的方法要通过我们新建的实例化对象newFader来调用,比如在上面的auto函数里要调用init的move方法的话,就直接调用'newFader.move()',这样才行。
可是这样还有个小问题,就是必须要保证实例化的变量名和代码中调用的一致,那么如果我改了我的初始化对象的名字,比如用newFader1,那么我还得去改源码,这样肯定是不行的,所以有个小技巧,就是在init里面多传一个参数,自己在做初始化的时候让变量名和参数一致,然后在源码里我们通过参数来调用。这样问题就圆满的解决了。
(ps:代码里之所以使用new Function的原因也是因为这样能冲破作用域链,这也是保证我们能这样架构我们代码的条件之一。)
综上:之前的代码应该这样优化:
var Hongru={};
function H$(id){return document.getElementById(id)}
function H$$(c,p){return p.getElementsByTagName(c)}
Hongru.fader = function(){
function init(anthor,options){this.anthor=anthor; this.init(options);}
init.prototype = {
init:function(options){ //options参数:id(必选):图片列表父标签id;auto(可选):自动运行时间;index(可选):开始的运行的图片序号
var wp = H$(options.id), // 获取图片列表父元素
ul = H$$('ul',wp)[0], // 获取
li = this.li = H$$('li',ul);
this.a = options.auto?options.auto:2; //自动运行间隔
this.index = options.position?options.position:0; //开始运行的图片序号(从0开始)
this.l = li.length;
this.cur = this.z = 0; //当前显示的图片序号&&z-index变量
this.pos(this.index); //变换函数
},
auto:function(){
this.li.a = setInterval(new Function(this.anthor+'.move(1)'),this.a*1000);
},
move:function(i){//参数i有两种选择,1和-1,1代表运行到下一张,-1代表运行到上一张
var n = this.cur+i;
var m = i==1?n==this.l?0:n:nthis.pos(m); //变换到上一张或下一张
},
pos:function(i){
clearInterval(this.li.a);
this.z++;
this.li[i].style.zIndex = this.z; //每次让下一张图片z-index加一
this.cur = i; //绑定当前显示图片的正确序号
this.auto(); //自动运行
}
}
return {init:init}
}();
初始化时应该这样:
var fader = new Hongru.fader.init('fader',{ //保证第一个参数和变量名一致
id:'fader'
});
好了,代码的优化方案到此结束。下面是第二部分效果的实现:淡入淡出的效果
其实有了上面良好的代码结构和逻辑的话,加入淡入淡出效果是比较容易的,思路很简单,在变化之前让图片透明,然后通过计时器让透明度渐渐增加。只不过这里面有几个边界的判断是比较重要的。同时透明度改变在ie和非ie下要注意用不同的css属性。
核心代码的改动就下面两段,一个是增加了透明度渐变函数fade(),另一个是在pos()里面事先要先把图片透明-->然后开始执行fade()
pos()里增加一个代码段:
if(this.li[i].o>=100){ //在图片淡入之前先把图片透明度置为透明
this.li[i].o = 0;
this.li[i].style.opacity = 0;
this.li[i].style.filter = 'alpha(opacity=0)';
}
this.li[i].f = setInterval(new Function(this.anthor+'.fade('+i+')'),20);
然后加一个功能函数fade()
fade:function(i){
if(this.li[i].o>=100){
clearInterval(this.li[i].f); //如果透明度变化完毕,清除计时器
if(!this.li.a){ //确保所有计时器都清除掉之后再开始自动运行。要不然会导致有控制器时点击过快的话,计时器没来得及清除就开始下一次变化,功能就乱了
this.auto();
}
}
else{ //透明度变化
this.li[i].o+=5;
this.li[i].style.opacity = this.li[i].o/100;
this.li[i].style.filter = 'alpha(opacity='+this.li[i].o+')';
}
}
好了,就这么简单。不过还有一点要记住就是在pos()调用的最初一定要记得清除上次的计时器!!
下面再把整个的源码都贴一遍吧:
var Hongru={};
function H$(id){return document.getElementById(id)}
function H$$(c,p){return p.getElementsByTagName(c)}
Hongru.fader = function(){
function init(anthor,options){this.anthor=anthor; this.init(options);}
init.prototype = {
init:function(options){ //options参数:id(必选):图片列表父标签id;auto(可选):自动运行时间;index(可选):开始的运行的图片序号
var wp = H$(options.id), // 获取图片列表父元素
ul = H$$('ul',wp)[0], // 获取
li = this.li = H$$('li',ul);
this.a = options.auto?options.auto:2; //自动运行间隔
this.index = options.position?options.position:0; //开始运行的图片序号(从0开始)
this.l = li.length;
this.cur = this.z = 0; //当前显示的图片序号&&z-index变量
/* ==加入淡入淡出功能 ==*/
for(var i=0;i
this.li[i].style.opacity = this.li[i].o/100; //非IE用opacity即可
this.li[i].style.filter = 'alpha(opacity='+this.li[i].o+')'; //IE用滤镜
}
this.pos(this.index); //变换函数
},
auto:function(){
this.li.a = setInterval(new Function(this.anthor+'.move(1)'),this.a*1000);
},
move:function(i){//参数i有两种选择,1和-1,1代表运行到下一张,-1代表运行到上一张
var n = this.cur+i;
var m = i==1?n==this.l?0:n:nthis.pos(m); //变换到上一张或下一张
},
pos:function(i){
clearInterval(this.li.a); //清除自动变换计时器
clearInterval(this.li[i].f); //清除淡入淡出效果计时器
this.z++;
this.li[i].style.zIndex = this.z; //每次让下一张图片z-index加一
this.cur = i; //绑定当前显示图片的正确序号
this.li.a = false; //做一个标记,下面要用到,表示清除计时器已经完成
//this.auto(); //自动运行
if(this.li[i].o>=100){ //在图片淡入之前先把图片透明度置为透明
this.li[i].o = 0;
this.li[i].style.opacity = 0;
this.li[i].style.filter = 'alpha(opacity=0)';
}
this.li[i].f = setInterval(new Function(this.anthor+'.fade('+i+')'),20);
},
fade:function(i){
if(this.li[i].o>=100){
clearInterval(this.li[i].f); //如果透明度变化完毕,清除计时器
if(!this.li.a){ //确保所有计时器都清除掉之后再开始自动运行。要不然会导致有控制器时点击过快的话,计时器没来得及清除就开始下一次变化,功能就乱了
this.auto();
}
}
else{
this.li[i].o+=5;
this.li[i].style.opacity = this.li[i].o/100;
this.li[i].style.filter = 'alpha(opacity='+this.li[i].o+')';
}
}
}
return {init:init}
}();
大家要注意我写的注释,有些地方是比较关键的。
再看看运行效果吧:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
可能有人注意到了,这里的淡入淡出只是个头衔,其实只有淡入效果,不过不碍事,效果其实和有淡出基本一样,而且就算要淡出功能也仅仅需要改两句话。呵呵
这一部分到此结束,下一部分会加入控制器。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Avec la popularité des appareils mobiles, la conception Web doit prendre en compte des facteurs tels que la résolution de l'appareil et la taille de l'écran des différents terminaux pour offrir une bonne expérience utilisateur. Lors de la mise en œuvre d'un design réactif d'un site Web, il est souvent nécessaire d'utiliser l'effet carrousel d'images pour afficher le contenu de plusieurs images dans une fenêtre visuelle limitée, et en même temps, cela peut également améliorer l'effet visuel du site Web. Cet article expliquera comment utiliser CSS pour obtenir un effet de carrousel automatique d'image réactif, et fournira des exemples de code et une analyse. Idées d'implémentation L'implémentation d'un carrousel d'images réactif peut être réalisée grâce à la mise en page flexible CSS. exister

Comment utiliser PHP pour implémenter les fonctions de carrousel d'images et de diaporama Dans la conception Web moderne, les fonctions de carrousel d'images et de diaporama sont devenues très populaires. Ces fonctionnalités peuvent ajouter une certaine dynamique et attirer les pages Web et améliorer l'expérience utilisateur. Cet article expliquera comment utiliser PHP pour implémenter des fonctions de carrousel d'images et de diaporama afin d'aider les lecteurs à maîtriser cette technologie. Création de l'infrastructure en HTML Tout d'abord, créez l'infrastructure dans le fichier HTML. Disons que notre carrousel d'images comporte un conteneur et plusieurs éléments d'image. Le code HTML est le suivant

Comment implémenter l'effet de changement de carrousel d'images et ajouter une animation de fondu entrant et sortant avec JavaScript ? Le carrousel d'images est l'un des effets courants dans la conception Web. En changeant d'images pour afficher un contenu différent, il offre aux utilisateurs une meilleure expérience visuelle. Dans cet article, je vais vous présenter comment utiliser JavaScript pour obtenir un effet de changement de carrousel d'images et ajouter un effet d'animation de fondu entrant et sortant. Vous trouverez ci-dessous un exemple de code spécifique. Tout d'abord, nous devons créer un conteneur contenant le carrousel dans la page HTML et l'ajouter

Comment utiliser PHP pour développer une fonction de carrousel d'images simple La fonction de carrousel d'images est très courante dans la conception Web et peut présenter aux utilisateurs de meilleurs effets visuels et améliorer l'expérience utilisateur. Cet article expliquera comment utiliser PHP pour développer une fonction simple de carrousel d'images et donnera des exemples de code spécifiques. Tout d’abord, nous devons préparer certaines ressources d’images sous forme d’images carrousel. Placez ces images dans un dossier et nommez-le « slider », en vous assurant que le chemin du dossier est correct. Ensuite, nous devons écrire un script PHP pour obtenir ces graphiques

Comment utiliser HTML, CSS et jQuery pour créer un carrousel d'images dynamiques Dans la conception et le développement de sites Web, le carrousel d'images est une fonction fréquemment utilisée pour afficher plusieurs images ou bannières publicitaires. Grâce à la combinaison de HTML, CSS et jQuery, nous pouvons obtenir un effet carrousel d'images dynamique, ajoutant de la vitalité et de l'attrait au site Web. Cet article explique comment utiliser HTML, CSS et jQuery pour créer un carrousel d'images dynamique simple et fournit des exemples de code spécifiques. Étape 1 : Configurer la jonction HTML

Comment implémenter la fonction carrousel d'images via le plug-in WordPress Dans la conception de sites Web d'aujourd'hui, la fonction carrousel d'images est devenue une exigence courante. Il peut rendre le site Web plus attrayant et afficher plusieurs images pour obtenir un meilleur effet publicitaire. Dans WordPress, nous pouvons implémenter la fonction de carrousel d'images en installant des plug-ins. Cet article présentera un plug-in commun et fournira des exemples de code pour référence. 1. Introduction au plug-in Dans la bibliothèque de plug-ins WordPress, vous avez le choix entre de nombreux plug-ins de carrousel d'images, dont l'un est souvent

Comment utiliser Vue et ElementPlus pour implémenter des carrousels d'images et des diaporamas. Dans la conception Web, les carrousels d'images et les diaporamas sont des exigences fonctionnelles courantes. Ces fonctions peuvent être facilement implémentées à l'aide du framework Vue et ElementPlus. Cet article explique comment utiliser Vue et ElementPlus pour créer un composant de carrousel d'images et de diaporama simple et esthétique. Tout d’abord, nous devons installer Vue et ElementPlus. Exécutez les commandes suivantes sur la ligne de commande :

Comment JavaScript peut-il obtenir l'effet de commutation coulissante de haut en bas des images tout en ajoutant des animations de zoom et de fondu ? Dans la conception Web, les effets de changement d’image sont souvent utilisés pour améliorer l’expérience utilisateur. Parmi ces effets de commutation, les animations de glissement de haut en bas, de zoom et de fondu sont relativement courantes et attrayantes. Cet article explique comment utiliser JavaScript pour réaliser la combinaison de ces trois effets d'animation. Tout d’abord, nous devons utiliser HTML pour créer une structure de page Web de base contenant les éléments d’image à afficher. Ce qui suit est un exemple
