最近对css的兴趣提不起来,因为以前对图片轮播一直耿耿于怀苦于学艺不精,所以,花了点时间熟悉了一下js。然后一条道走到黑,用jquery和js写了一下轮播和图片淡入的效果。以后学习的路很长,希望自己在前端的路上越走越远`(∩_∩)′

从原理来讲,网上的教程有很多,简单来说。

淡入淡出,其实这里只用到了淡入的效果。每一张淡入的图片,我们将它的display设置为block,其他为none,所以实际存在并且在文档流占位置的只有一张图片。在设置图片的display方式之前,将图片的透明度逐渐增大,就会给人一种淡入的感觉。

其实在js代码中,还有关键的一点,代码中用到了闭包,因此,才对闭包有了一点点认识。在这里多说几句吧:

闭包的官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

比较简单的说法是:

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

说的更透彻一些。所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层函数体中的临时变量。这使得只要目标对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值。

尽管最开始的构造函数调用已经结束,临时变量的名称也都消失了,但在目标对象的方法内却始终能引用到该变量的值,而且该值只能通这种方法来访问。即使再次调用相同的构造函数,但只会生成新对象和方法,新的临时变量只是对应新的值,和上次那次调用的是各自独立的。

下面这个函数就是一个闭包函数。为什么要用闭包?普通函数不可以吗?真的是不可以。这里闭包的作用是保持对flag的引用。如果不用闭包,对于局部变量来说,只要函数执行了一次,也就是flag执行了一次,这个局部变量就会被垃圾回收机制回收清理掉,而我们通过间歇调用中的函数引用flag变量,在第二次执行的时候,flag就会失去它的值,函数体无法执行正确的结果了。在开始接触前端的时候,觉得闭包可有可无,事实是,这东西真的很重要!

var setVal = function(s, flag)

{

return function()

{

pos = Math.abs(parseInt(pic.style[point]));

if(flag > 0){ //当前点大于目标点坐标,画面向右移动,left值减小

pic.style[point] =-Math.floor(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';

}

if(flag < 0) {

pic.style[point] =-Math.ceil(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';

}

if(pos == (sSingleSize * s))

{

now = s;

clearInterval(interval);

}

}

};

下面是代码:

html

picsGlide

  • puss in boots1
  • puss in boots2
  • puss in boots3
  • puss in boots4
  • puss in boots5
  • 1
  • 2
  • 3
  • 4
  • 5

css

body {font-size: 12px;

}

ul, li {

padding: 0;

margin: 0;

list-style: none;

}

#picBox {

width: 610px;

height: 205px;

margin: 50px auto;

overflow: hidden;

position: relative;

font-size: 0;

}

/*轮播图片*/

#picBox .show_pic {

width: 3050px;

position: absolute;

}

#picBox .show_pic li {

float: left;

width: 610px;

height: 205px;

display: none;

/*display: none;

*/

}

#picBox .show_pic li.on {

display: block;

}

#picBox .show_pic li img {

display: block;

width: 610px;

height: 205px;

}

#picBox .icon_num {

position: absolute;

bottom: 12px;

right: 10px;

z-index: 10;

}

#picBox .icon_num li {

float: left;

/*background: url(/uploadfile/200912/28/FA15567738.gif) no-repeat -15px 0;

*/

width: 16px;

height: 16px;

font-size: 16px;

color: #39F;

text-align: center;

cursor: pointer;

margin-right: 5px;

}

#picBox .icon_num li.on {

background: #000;

opacity: 0.5;

}

/*背景*/

.bg {

z-index: 1;

position: absolute;

bottom: 0;

height: 40px;

width: 610px;

background: #000;

opacity: 0.6;

filter: alpha(opacity = 60);

}

#picBox .show_des {

width: 300px;

height: 18px;

position: absolute;

bottom: 11px;

left: 15px;

color: #fff;

z-index: 10;

}

#picBox .show_des li {

display: none;

line-height: 18px;

font-size: 18px;

}

#picBox .show_des li.on {

display: block;

}

js

function cleanWhitespace(oEelement)

{

for(var i=0;i

var node=oEelement.childNodes[i];

if(node.nodeType==3 && !/\S/.test(node.nodeValue))

{

node.parentNode.removeChild(node);

}

}

}

//轮播代码

this.layerGlide=function(auto,oBox,sSingleSize,second,fSpeed,point)

{

var interval,timeout; //两个定时器

var pos; //当前定位坐标整形的绝对值

var time = second, now = 0; //time图片移动一次时间间隔, now当前图片的index值

var speed = fSpeed //移动速度

var delay = second * 1000; //每次切换图片的时间间隔

var picBox = document.getElementById(oBox);

cleanWhitespace(picBox);

var pic = picBox.childNodes[0]; //图片列表

var des = picBox.childNodes[2].getElementsByTagName("li"); //图片列表

var con = picBox.childNodes[3].getElementsByTagName("li");

var sum = con.length;

var setVal = function(s, flag)

{

return function()

{

pos = Math.abs(parseInt(pic.style[point]));

if(flag > 0){ //当前点大于目标点坐标,画面向右移动,left值减小

pic.style[point] =-Math.floor(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';

}

if(flag < 0) {

pic.style[point] =-Math.ceil(pos+(parseInt(s*sSingleSize) - pos)*speed) +'px';

}

if(pos == (sSingleSize * s))

{

now = s;

clearInterval(interval);

}

}

};

var changeTo = function(num) {

for(var i=0; i

{

con[i].className = "";

des[i].className = "";

};

con[num].className = "on";

des[num].className = "on";

var flag = Math.abs(parseInt(pic.style[point]))-sSingleSize * num ;

interval = setInterval(setVal(num, flag), time);

//bkg.hide().fadeIn();

}

function autoGlide()

{

clearTimeout(interval);

now = (now == (parseInt(sum)-1) )? 0: (now + 1);

changeTo(now);

timeout = setTimeout(autoGlide,delay);

}

function isAuto() {

if(auto) {

timeout = setTimeout(autoGlide,delay);

};

}

isAuto(); //开始自动轮播

for(var i=0; i

{

con[i].onmouseover = (function(i)

{

return function()

{

clearTimeout(timeout);

clearInterval(interval);

changeTo(i);

this.οnmοuseοut=isAuto();

}

})(i)

}

}

//淡入淡出

this.layerFader=function(auto, oBox, second, count, speed)

{

var interval,timeout; //两个定时器

var now = 0; //time图片移动一次时间间隔, now当前图片的index值

var delay = second * 1000; //每次切换图片的时间间隔

var picBox = document.getElementById(oBox);

cleanWhitespace(picBox);

var pic = picBox.childNodes[0].getElementsByTagName("li");

var des = picBox.childNodes[2].getElementsByTagName("li");

var con = picBox.childNodes[3].getElementsByTagName("li");

var sum = con.length;

function fadeIn(elem){

setOpacity(elem,0); //初始全透明

for(var i = 0;i<=count;i++){ //透明度改变 20 * 5 = 100

(function(i){

var level = i * 5; //透明度每次变化值

setTimeout(function(){

setOpacity(elem, level)

},i*speed);

})(i);

}

}

function setOpacity(elem, level) { //设置透明度

if (elem.filters) {

elem.style.filter = "alpha(opacity=" + level + ")";

} else {

elem.style.opacity = level / 100;

}

}

var changeTo = function(num) {

for(var i=0; i

{

con[i].className = "";

des[i].className = "";

pic[i].className = "";

};

fadeIn(pic[num]);

con[num].className = "on";

des[num].className = "on";

pic[num].className = "on";

//bkg.hide().fadeIn();

}

function autoGlide()

{

clearTimeout(interval);

now = (now == (parseInt(sum)-1) )? 0: (now + 1);

changeTo(now);

timeout = setTimeout(autoGlide,delay);

}

function isAuto() {

if(auto) {

timeout = setTimeout(autoGlide,delay);

};

}

isAuto(); //开始自动轮播

for(var i=0; i

{

con[i].onmouseover = (function(i)

{

return function()

{

clearTimeout(timeout);

//clearInterval(interval);

changeTo(i);

this.οnmοuseοut=isAuto();

}

})(i)

}

}

jquery相对于js就简单了很多,这里就不赘述了。大三的时候上设计模式课,老师告诉我们针对接口而不是针对实现编程,代码中尽量不要出现常量,提高代码的复用性,所以写代码的时候,把可变的因素都提到了参数中。最后一句,对于js的DOM操作,js原生是王道,多用多练,才能掌握的好,希望以后越走越远。

以上这篇原生JS实现图片轮播与淡入效果的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

html多图轮播淡入淡出js,原生JS实现图片轮播与淡入效果的简单实例相关推荐

  1. html轮播带缩略图,js带缩略图的图片轮播效果代码分享

    本文实例讲述了js带缩略图的图片轮播效果.分享给大家供大家参考.具体如下: 这是一款基于javaScript实现带缩略图的图片轮播特效代码,实现过程很简单. 运行效果图:--------------- ...

  2. html图片自动切换的幻灯片效果的,js带点自动图片轮播幻灯片特效代码分享

    本文实例讲述了javascript带点自动图片轮播幻灯片特效.分享给大家供大家参考.具体如下: 这是一款基于javascript实现带点自动图片轮播幻灯片特效代码,实现过程很简单. 运行效果图:--- ...

  3. 使用SDWebImage淡入淡出的方式加载图片

    使用SDWebImage淡入淡出的方式加载图片 效果: 请通过以下方式下载源码: 找到它修改文件的地方: 以下是使用源码: // // ViewController.m // SDWebImageFa ...

  4. android淡入淡出动画循环,Android应用开发之淡入淡出、缩放、旋转、平移、组合动画效果代码实现...

    本文将带你了解Android应用开发Android动画开发之淡入淡出.缩放.旋转.平移.组合动画效果代码实现,希望本文对大家学Android有所帮助. 1.activity_main.xml文件 an ...

  5. html鼠标移动时图片放大缩小,JS与CSS3实现图片响应鼠标移动放大效果示例

    本文实例讲述了JS与CSS3实现图片响应鼠标移动放大效果.分享给大家供大家参考,具体如下: 今天看网易的网站上,当我把鼠标放上去的时候发现图片放大,移开图片缩小,于是自行尝试,结果如下. 方法一:使用 ...

  6. android js变量定义数组长度,js 声明数组和向数组中添加对象变量的简单实例

    数组有四种定义的方式 使用构造函数: var a = new Array(); var b = new Array(10); var c = new Array("first", ...

  7. html 多张图片自动滚动,JS实现图片的不间断连续滚动的简单实例

    js替代marquee实现图片无缝滚动 可能大家都碰到过,当marquee中滚动的是图片的时候,滚到终点的时候直接就跳回到起点了,而不像文字那样可以无缝滚动,下面介绍的是通过js来实现图片的无缝滚动. ...

  8. android js变量定义数组,js 声明数组和向数组中添加对象变量的简单实例

    数组有四种定义的方式 使用构造函数: var a = new Array(); var b = new Array(10); var c = new Array("first", ...

  9. html数组添加对象的方法,js声明数组和向数组中添加对象变量的简单实例

    数组有四种定义的方式 使用构造函数: var a = new Array(); var b = new Array(10); var c = new Array("first", ...

最新文章

  1. JS疑惑-1(连续赋值)
  2. 《四世同堂》金句摘抄(十七)
  3. leetcode 剑指 Offer 05. 替换空格
  4. SpringBoot+Shiro+ehcache实现登录失败超次数锁定帐号
  5. python读取html文件中的表格数据_使用解析html表pd.read_html文件其中单元格本身包含完整表...
  6. 从字符串数组中寻找数字的元素
  7. 开红字信息表的时候服务器为空,对方开了红字信息表但系统没有显示怎么办
  8. jQuery EasyUI datagrid实现本地分页的方法
  9. python eval函数_Python基础元素语法总结
  10. gcc: libc: __ASSEMBLER__; Kernel: __ASSEMBLY__
  11. Conjugate function and Fenchel’s duality theorem
  12. [USACO09OCT]谷仓里的回声Barn Echoes(hush、STL)
  13. 刺沙冰雪高爆版辅助多开方案
  14. 网站被降权的6种处理方法
  15. html2canvas微信头像没绘制,解决使用canvas生成含有微信头像的邀请海
  16. 基于UX-APP的学伴原型化系统
  17. SAP---安装方法
  18. 检测JS数据类型的方法
  19. 低功耗读卡(RFID)电路与程序实现
  20. linux网络电视盒安装,网络电视盒怎么安装 网络电视盒安装步骤【详细介绍】...

热门文章

  1. 来来来,咱们聊一下 JWT。安全验证的知识 两篇文章就够了
  2. 更便捷的二维码报修系统
  3. Android模拟器的判定
  4. [Java][Casssandra] create column family in Casssandra version 1.1.7
  5. nc服务器修改过ip地址,nc服务器修改过ip地址
  6. 轨道交通通信施工学习总结(四)漏泄同轴电缆安装
  7. 自定义 iPhone 铃声
  8. rdp远程Windows10连接不上的解决方案
  9. Android 自定义View漫飞舞超炫超浪漫特效
  10. 如何判断和删除Orphaned site collections?