`
Catherine_luo
  • 浏览: 17659 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

栅栏图片展示:延迟加载+ajax

阅读更多
本文介绍了一个类似百度图片的图片展示页面。
鼠标滚动时才加载图片,当鼠标滚动到页尾的时候,则ajax更多的图片。
ajax部分是我自己写的,我觉得好像对于浏览器的负担挺重的,我用IE6测试的时候,会发现加载得很慢,很卡。希望有大神可以指点一下,帮我优化一下我的AJAX.

以下代码是用了lazyload插件以及自己编写的一个ajax(当鼠标的位置到底部的时候,则加载更多的图片)

参考资料


              



index.php
<!DOCTYPE HTML>
<html>
<head>
<title>画廊</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<script src="js/Jquery-1.8.2min.js"></script>
<script src="js/jquery.lazyload.js"></script>
<script>

$(document).ready(function(){
		bindImgEvent();//延迟加载
	
	var ajaxStatu=true;//ajax状态,防止鼠标滚动时,多次ajax
	$(document).mousemove( setTimeoutFun( function(e){
		if( ajaxStatu && checkMousePosition(e) ){//ajax更多图片
			ajaxStatu = false;
			var time = new Date().getTime();
			$.ajax({
				type:'POST',
				url:'ajaxPic.php?t='+time,
				dataType:'json',
				success:function(data){
					var html;
					for(var i in data){
						for(var j in data[i]){
							html +='<li class="coli"><div class="coliDiv"><a href="#"><img class="imgCon" data-original="images/'+data[i][j]['imgSrc']+'" src="images/loadPic.gif"/></a><div class="imgInfo"><a href="#" class="proName">'+data[i][j]['proName']+'</a><span class="tag"><span class="tagTitle">类别:</span><a href="#" class="tagCon">'+data[i][j]['tagCon']+'</a></span><div></div></li>';				
						}
						$('#picUl'+i).append(html);
						html='';
					}
					bindImgEvent();//为图片绑定延迟加载
					ajaxStatu = true;
				}
			});
		}
	}, 300) )
});

function setTimeoutFun( func, waitSec, immediate ){
	var timeout;
	return function(){
		var context = this, args = arguments;
		var later = function(){//倒计时结束,执行
			timeout = null;
			if( !immediate ){
				func.apply( context, args );//运行函数
			}
		}
		var callNow = immediate && !timeout; 
		clearTimeout( timeout );
		setTimeout( later, waitSec );
		if( callNow ){//倒计时还没结束,人为结束
			func.apply( context, args );
		}
	
	}
}

function bindImgEvent(){
	$(".imgCon").lazyload({//延迟加载
		effect : "fadeIn",
		threshold : 200,
		failure_limit : 100//图片不顺序排列,将 failurelimit 设为 100 令插件找到 100 个不在可见区域的图片是才停止搜索
	});
}

//检查鼠标的位置是否已经在页面底部
function checkMousePosition(ev){
	var pointY;			//鼠标的Y坐标
	var  pageHeight;	//页面的高度
	if(typeof window.pageYOffset != 'undefined'){
		pointY = window.pageYOffset;
	} else if(typeof document.documentElement != 'undefined'){
		pointY = document.documentElement.scrollTop;
	} else if(typeof document.body != 'undefined'){
		pointY = document.body.scrollTop;
	}
	pointY += ev.clientY;	// 加上鼠标在视窗中的位置

	if (window.innerHeight && window.scrollMaxY) {
		pageHeight = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		pageHeight = document.body.scrollHeight;
	} else {
		pageHeight = document.body.offsetHeight;
	}
	
	if(pageHeight-pointY>600){//鼠标的位置在离底部500px的上方
		return false;
	}else{
		return true;
	}
}
</script>
<style>
body{
	background:rgb(243,242,243);
}
*{
	font:12px '宋体';
	margin:0;
	padding:0;
}
#content{
	width:1250px !imporant;
	margin:0 auto;
	max-width:1250px;
	min-width:990px;
}
.column{
	float:left;
	position:relative;
	top:0px;
	width:234px;
	margin-right:15px;
	list-style:none;
	display:inline-block;
}
.coli{
	width:234px;
	position:relative;
	margin-bottom:15px;
	box-shadow:0 1px 2px 0 rgba(210, 210, 210, 0.31);
	-webkit-box-shadow: 0 1px 2px 0 rgba(180, 180, 180, 0.5);
	border-top: 1px solid rgb(238, 238, 238);
	height: auto!important;
	overflow:visible;
}
.coliDiv{
	display:block;
	background:#ffffff;
	padding:10px;
}
.coliDiv img{
	width:100%;
	max-width:100%;
	border:0px #fff;
}
.coliDiv img:hover{
	filter:opacity(70%);
	-webkit-filter:opacity(70%);
}
.imgInfo{
	width:100%;
	overflow:hidden;
	cursor:pointer;
	vertical-align:baseline;
	padding:12px 0 0 0;
	display:block;
	font-size:100%;
}
.imgInfo a{
	color:#000000;
	height:18px;
	line-height:18px;
	text-decoration:none;
}
.proName{
	display:block;
}
.tag{
	font-size: 14px;
	padding-top:5px;
}
.tagTitle{
	color: rgb(136, 136, 136);
}
.tagCon{
	background:rgb(244, 244, 244);
	display:inline-block;
	clear:left;
	padding:3px 5px;
	border-radius:5px;
}
a.tagCon:hover{
	background:rgb(228,70,54);
	color:#fff;
}
</style>
</head>

<body>


<div style="padding:20px;"></div>
<div id="content">
<ul>
<?php for($x=1; $x<6; $x++) {?>
	 <ul class="column" id="picUl<?php echo $x;?>"> 
	<?php	for($i=1; $i<101; $i++){?>
		<li class="coli">
			<div class="coliDiv">
				<a href="#"><img  class="imgCon" data-original="images/<?php echo ($i+$x)%2;?>.jpg" src="images/loadPic.gif"/></a>
				<div class='imgInfo'>
					<a href="#" class="proName">图片名称</a>
					<span class="tag">
						<span class="tagTitle">类别:</span>
						<a href='#' class="tagCon">动物</a>
					</span>
				<div>
			</div>
		</li>
	<?php } ?>
	</ul>
<?php } ?>
</div>


</body>

</html>


ajaxPic.php
<?php
$arr = array();
for($i=1; $i<6; $i++){
	for($j=1; $j<101; $j++){
		$arr[$i][] = array('imgSrc'=>'1.jpg', 'proName'=>iconv('gbk', 'UTF-8','ajax图片名称'), 'tagCon'=>iconv('gbk', 'UTF-8','ajax动物') );
	}
}
echo json_encode($arr);//json_encode,如果对象有中文,请记得把编码转为UTF8,要不然,json_encode就解析不了啦!  

?>




发现了lazyload.js的BUG
图片没有实现延迟加载。主要是在检测页面的位置的时候,用了$window.height(),返回的是window的整体高度,把它改为window.innerHeight就可以了。

$.belowthefold = function(element, settings) {
        var fold;
        
        if (settings.container === undefined || settings.container === window) {
            //fold = $window.height() + $window.scrollTop();
            fold = window.innerheight + $window.scrollTop();
        } else {
            //fold = $(settings.container).offset().top + $(settings.container).height();
            fold = $(settings.container).offset().top + window.innerheight;
        }
        return fold <= $(element).offset().top - settings.threshold;
    };




我上传了一个完整的包,最好在对HTML5以及CSS3支持得比较好的浏览器下运行咯。。。
分享到:
评论

相关推荐

    cass编码成图编码表.pdf

    * W + 数(0-宽为0.5米的围墙,1-栅栏,2-铁丝网,3-篱笆,4-活树篱笆,5-不依比例围墙,不拟合,6-不依比例围墙,拟合) 铁路类: * T + 数(0-标准铁路(大比例尺),1-标(小),2-窄轨铁路(大),3-窄(小)...

    凯撒+栅栏的python实现

    在提供的压缩包文件"凯撒+栅栏"中,可能包含了上述Python代码的实现,以及一些示例的加解密文本,帮助读者更好地理解这两种加密技术。通过学习这些代码,你可以自己动手实践,进一步熟悉Python编程和加密算法的运用...

    栅栏密码加密解密工具

    栅栏密码的基本原理是将明文按照一定规则分割成多个部分,然后重新排列这些部分形成密文,以此来增加破解的难度。 加密过程通常涉及以下步骤: 1. **确定栅栏数量**:首先,我们需要选择一个栅栏的数量,这决定了...

    对凯撒密码、维吉尼亚密码、栅栏密码、摩斯密码、Base64编码、AES、DES、RSA、RC4维吉尼亚密钥破解的加密解密工具

    基于Python实现一个能够对凯撒密码、维吉尼亚密码、栅栏密码、摩斯密码、Base64编码、Ascii编码、AES、DES、RSA、RC4的加密解密以及密文破解维吉尼亚密钥和明文的CTF Crypto工具

    栅栏密码题目及工具

    在实际应用中,栅栏密码可以通过多种方式进行变体,如使用多栏栅栏、改变栅栏的排列顺序或使用不规则的栅栏形状。这些变化增加了密码的复杂性,但也使得解密过程更加困难,需要知道正确的栅栏结构。 在提供的压缩包...

    栅栏密码加密解密

    在描述中提到,该程序支持26栏以上的栅栏,这意味着它可以处理更复杂的加密,即使原文长度不是栏数的整数倍,也能有效处理。这种灵活性使得加密后的文本更难以被破解,因为不明确的栏数增加了猜测的难度。 在实际...

    栅栏解密和W型栅栏解密.py

    栅栏密码加密/解密算法传统型的栅栏密码加密/解密算法的变种,称为W型。网站有在线脚本,但在线下比赛时,会用到此脚本,自动分栏,比对结果

    EN-1175-1-1998+A1-2010 电气安全要求

    4. **防护装置**:规定了必要的防护设备,如防护栅栏、紧急停止按钮,以防止人员接触带电部件或在车辆运行时靠近危险区域。 5. **电磁兼容性(EMC)**:要求车辆在电磁环境中不会干扰其他设备,同时自身也能够抵抗...

    栅栏桌面fence

    此外,Fence还支持自定义栅栏背景,用户可以选择图片或者颜色来个性化自己的桌面环境,提升使用体验。 Fence的另一大亮点是其智能隐藏功能。当鼠标移出桌面区域或者双击桌面时,所有图标可以自动隐藏,只留下清爽的...

    栅栏桌面Fences1.0简体中文版.rar

    右键单击栅栏选择"删除栅栏"可以删除一个栅栏。快捷提示:为了使您的桌面不出现混乱, 双击桌面可以快速隐藏所有图标。再次双击桌面显示所有隐藏图标。按住键盘的WINDOWS图标键然后再按"D"键可以快速显示桌面。再次...

    EMC认证产品适用标准及测试项目.pdf

    如真空吸尘器、地板抛光机、咖啡磨、食物混合器、液体混合器、搅拌器、榨汁机、钟、速度控制器、按摩设备、风扇、干发器、厨房抽油烟机、冷藏箱...、影像机、电栅栏、静电吸尘器、充电器、整流器、变换器、电子玩具等...

    栅栏填充算法源码(VC)

    栅栏填充算法是一种在计算机图形学中常见的填充技术,它主要用于图像处理和二维图形的着色。这个算法的原理是沿着图形的边界进行扫描,并在内部进行颜色填充。在VC++环境中实现的栅栏填充算法源码,为学习和研究图形...

    Linux内存栅栏概述

    Linux内存栅栏概述 Linux内存栅栏概述 Linux内存栅栏概述

    DFT 的栅栏效应:DFT 的栅栏效应。-matlab开发

    交互式应用程序通过使用长度为 10 的离散时间脉冲、离散时间傅里叶变换 (DTFT) 和在可选的零填充后计算的离散傅里叶变换 (DFT) 来说明 DFT 的栅栏效应。 (可能是零填充的)离散时间脉冲信号的 DFT 与其 DTFT 叠加,...

    内存栅栏和volatile关键字1

    内存栅栏是一种指令,它强制在栅栏之前和之后的指令不发生交叉执行,保证特定操作的顺序,防止缓存的延迟效应。在.NET中,我们可以使用`Thread.MemoryBarrier()`方法来创建内存栅栏。在上述例子中,通过在 `_answer`...

    栅栏密码加解密1.10.rar

    1. **用户界面**:软件可能提供一个简洁的用户界面,允许用户输入明文信息,并选择栅栏的排列方式(例如,直线、Z形、S形等)。 2. **加密过程**:用户输入明文后,程序会根据选定的排列方式将文本切割,并沿指定...

    栅栏加密算法实现c++实现

    栅栏加密代码的c++实现写的简单比较容易看也很容易学习

    电信设备-可移动栅栏与栅栏导向装置间可滑动分离连接装置.zip

    "可移动栅栏与栅栏导向装置间可滑动分离连接装置"是一种创新设计,旨在优化电信设备的安装、维护及安全防护。这种连接装置的设计考虑了灵活性和稳定性,使得在不影响设备正常运行的前提下,能够方便地进行设备的安装...

Global site tag (gtag.js) - Google Analytics