【JavaScript】利用文件碎片DocumentFragment改进兼容IE6可调可控的图片滑块

上次在《【JavaScript】兼容IE6可调可控的图片滑块》(点击打开链接)的算法写得很不好,如果你要做N个图片的图片滑块,每次显示X张图片,则要一次性地多加载X-1张图片,还要用一种显示框移动的方法去实现。更可怕的是,还要理所当然地认为就是这样的。虽然这个违背常人思维方式在网上广泛流传,而且好像还是公式一样,就只有一种实现方法,其实不是的,明显可以利用文件碎片DocumentFragment去实现图片滑块,如果你要N个图片的图片滑块,就加载N个图片,这才是正常的。关键利用文件碎片,实现200000张图片的图片滑块也是没问题的。前文写的方法就捉襟见肘了。

一、基本目标

还是与上次一模一样的功能,但是实现方式与上次不同,具体请比对两篇文章阅读

二、基本思想

上次要加载N张图片,利用显示滑块去实现,但是这次再利用如下的方式:

就是我在上文中认为打死也不可能的方式,把四个图片滑块看做是数组,滑块向左移则把数组第一个元素移到末尾,滑块向右移则把数组最后一个元素移到头部。

三、制作过程

1、HTML布局还是上文的布局,图片就是那几张从winxp系统拔来的可怜图片,一字没改,具体如下,不再赘述。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>picmarquee</title>
</head>

<body>
<div>sssssss</div>
<div style="float:left;"><button onclick="pic_marquee_move(0)"><</button></div>
<div id="picMarquee" style="float:left;">
    <div style="padding-left:10px; float:left; display:block;"><a href="imgs/Ascent.jpg" target="_new"><img src="imgs/Ascent.jpg" width="50px" border="0" /></a></div>

    <div style="padding-left:10px; float:left; display:block;"><a href="imgs/Autumn.jpg" target="_new"><img src="imgs/Autumn.jpg" width="50px" border="0" /></a></div>

    <div style="padding-left:10px; float:left; display:block;"><a href="imgs/Azul.jpg" target="_new"><img src="imgs/Azul.jpg" width="50px" border="0" /></a></div>

    <div style="padding-left:10px; float:left; display:block;"><a href="imgs/Crystal.jpg" target="_new"><img src="imgs/Crystal.jpg" width="50px" border="0" /></a></div>

</div>
<div style="float:left; padding-left:10px;"><button onclick="pic_marquee_move(1)">></button></div>
<div style="clear:both"></div>
<div>sssssss</div>
</body>
</html>

2、之后的javascript实现部分是实现的重点,这里灵活使用了《【JavaScript】利用getElementsByTagName与getElementsByName改进原生态兼容IE6标签页》(点击打开链接)成组取节点的方式与javascript对于数组Array的操作函数unshift(),shift(),pop(),push(),文件碎片就是一个在内存的节点,与操作平时节点《【JavaScript】网页节点的增删改查》(点击打开链接)没有任何区别,具体如下:

<script>
//网页加载就要调用这个函数了,参数1代表向右滚动,注意HTML的按钮调用的函数你就知道了
pic_marquee_move(1);
//每2S向右变换一次
setInterval("pic_marquee_move(1)",2000);
function pic_marquee_move(leftOrRight){
	//取得picMarquee下的所有div节点,形成一个数组
	var divArr=document.getElementById("picMarquee").getElementsByTagName("div");
	//只是这样的一个“引用数组”还不能直接操作,必须新建一个真正数组把这里面的所有存进去
	var tempSoftArr=new Array();
	for(var i=0;i<divArr.length;i++){
		tempSoftArr[i]=divArr[i];
	}
	//如果向左移
	if(leftOrRight==0){
		//那么把删除数组第一个元素,并把这个元素通过变量存起来
		var firstPic=tempSoftArr.shift();
		//之后把这个元素放到这个数组的最后一个位置,也相当于插入到数组
		tempSoftArr[tempSoftArr.length]=firstPic;
	}
	else{
		//如果向右移,把最后一个元素放到这个数组的头部
		tempSoftArr.unshift(tempSoftArr.pop());
	}
	//新建一个文件碎片,文件碎片就是一个暂存夹,你先把这个节点弄好再放到真正的网页里面去,不用弄一个节点就刷新一次网页,卡爆
	var frag=document.createDocumentFragment();
	for(var i=0;i<tempSoftArr.length;i++){
		frag.appendChild(tempSoftArr[i]);
	}
	//文件碎片是替换插入方式,原来id为picMarquee节点旗下的东西会被文件碎片节点替换
	document.getElementById("picMarquee").appendChild(frag);
}
</script>

至此,整个画图滑块做完。

时间: 2024-08-06 20:03:42

【JavaScript】利用文件碎片DocumentFragment改进兼容IE6可调可控的图片滑块的相关文章

【JavaScript】兼容IE6可调可控的图片滑块

图片滑块其实也与图片轮播一样,无需这么多奇奇怪怪的代码就能够实现,只是布局有点复杂,而且这东西在Bootstrap里面也没有,在网页中,这个组件也越来越少见的,毕竟这个小小的组件太浪费网络资源了,实现的逻辑还比较复杂,如果不要被特别要求,能不做最好不好. 有时候,如果一个如同<[CSS]黑色幽默,兼容IE6的纯原生态的门户网站>(点击打开链接)的简单网页就能够交货,就不要卖弄你的前端技巧了. 虽然这个组件的效率很低,但是还是讲解一下实现的原理,也是完美兼容IE6,同时包你能够随心所欲地放置这个

【JavaScript】原生态兼容IE6可调可控的滚动文字

虽然HTML里面本身就有marquee标签,用来设置滚动文字,但是在<[HTML]比较冷门标签与属性>(点击打开链接)我已经说过,这个标签到了IE8就开始不支持,在IE6中可以设置的东西也很少,所以这东西还是用javascript来写为好.这个小组件也是比较常见的,但是网上的代码质量还是为了很多无关紧要的小特效而增加了许多无谓的代码.其实这东西,你只要弄得能自己向右向左滚,到了屏幕边缘自动返回就行了,为什么要为了一些淡入淡出的华而不实的东西,而写一大摞代码了.下面介绍一个自己写的利用paddi

【jQuery】利用淡入淡出效果实现兼容IE6的告警提示

其实我觉得告警提示的话,直接用一个Alert就最好的.开门见山,直接让用户明白你当前系统的意思,关键是Alert这东西就是再破的浏览器都必须兼容,不然你它丫的做毛浏览器啊?但是,在现在越来越觉得Alert不美观,而且开始有"弹窗挺吓人"的思潮,因此,告警提示你必须做得好看一点.在Javascript的透明度的操控比较艰难的前提下,jQuery的简单淡入淡出效果是你的选择.之所以选择jQuery,是因为这东西能够很好地兼容IE6. 一.基本目标 当输入框的输入内容的字符数无论中文与英文大

【JavaScript】利用sort()函数与文件碎片实现表格的前端排序,兼容IE6原生态

表格排序在网页的应用也很多,尤其是一些信息系统输出一个密密麻麻的表格给人看,客户肯定会提出表格排序的要求.很多人定式思维地认为表格的排序一定要通过数据库后端进行交互,使用带order by asc/desc的语句去实现,然后再利用ajax似乎很完美似得.其实根本就不用与数据库打交道.在前端给出任意一个表格,都能够利用sort()函数与文件碎片实现表格的前端排序.在jquery里面是有一个advanceTable的插件做这件事,但是这个插件相当不好的是什么呢?与平常的插件一样,代码写得天花龙凤,没

JavaScript日历控件!JS兼容IE6.7.FF.可挡住下拉控件

原文发布时间为:2009-08-22 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><he

【php】利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6

MVC只是一种设计模式而已,一度被认为Model 1,也就是服务器语句与HTML语句杂糅的php,其实不用任何框架,仅仅利用原生态的JavaScript Ajax也可以对其进行MVC设计.由于什么都没有用,因此对IE6的兼容性是非常强的.还是<[php]数据库的增删改查和php与javascript之间的交互>(点击打开链接)那个页面的,对数据库增删改查的内容,希望各位能推广到整个网站. 一.基本目标 整个网页实现效果如下,用户输入完表单马上就有效果. 二.基本思想 首先,在test数据库中有

【JavaScript】利用onmousemove与onmouseout事件制作兼容IE6纯javascript无插件原生态的下拉菜单dropdown

下拉菜单dropdown在很多前端框架里面都有,直接拿来用就可以的,但是框架内的下拉菜单不好改,也很可能会有兼容性问题. 其实这东西完全可以利用HTML+CSS+Javascript去实现的. 效果如下: 其基本制作思想如下: 首先是HTML与CSS的布局,先布置一个table,这个table里面有两行,一行放下拉按钮,一行放下拉菜单,占据整个宽度的100%,单元格之间的行距为0. 因为共5个元素每列占20%. 这里不用div的float去布局,是因为这里使用table的话,这个下拉菜单组非常好

【JavaScript】原生态兼容IE6的图片轮播

<[Bootstrap]图片轮播组件Carousel>(点击打开链接)虽然做得很不错,但是由于只兼容到IE8,所以没有用的.其实原生态兼容IE6的图片轮播并没有想象中的那么难,网上的很多兼容IE6的图片轮播其实代码写得很糟糕的.首先复用性很差,根本就不知道怎么修改,然后加入了很多如同百叶窗这些可有可无的特效,把原本简短的代码弄得很差,最后,这些东西还直接用JavaScript创建组件来显示自己的Javascript学得有多么地强大,然后又不好好教别人怎么做,直接用一个JS写完整个网页个人觉得相

【JavaScript】纯粹javascript无任何插件的兼容IE6的模态框modal

模态框这东西在很多前端框架里面也是存在的,但是很多前端框架,如Bootstrap,AmazeUI,Jquery对IE6的兼容性极其糟糕,因此如果自己手写一个纯粹javascript无任何插件的的模态框,不仅能够兼容IE6,对其它浏览器很有很大的兼容性,同时,也好改. 一.基本目标 比如如下的模态框,怎么用在纯粹html+css+javascript,在无任何前端插件的情况下实现呢? 可以看到效果图,是在IETester的IE6模式中进行的,没有任何问题. 我还在这个模态框里面镶嵌了一个表单.反正