网页动态加载图片 通过JS和jquery实现。
;(function($){ $.fn.extend({ scrollLoad:function(options){ var options = $.extend({ src:'xsrc', //预加载在<img> 中的属性值 如<img xsrc='img.jpg' /> delayTime:300 // 滚动条停止在一个地方超过300毫秒,才开始加载 },options); var _this = this; //将this保存下来。 init.call(_this); //页面载入后马上加载一次。 $(window).scroll(function(){ //给窗口绑定事件,当滚动条滚动时,加载图片 window.setTimeout(function(){ init.call(_this); },options.delayTime); }); function init(){ $(this).each(function(i,n){ if(n.tagName.toLowerCase() !=='img'){ return; } if($(n).attr(options.src) === 'undefined'){ return; } var windowTop = $(document).scrollTop(), windowBottom = windowTop + $(window).height(), imgTop = $(n).offset().top, imgBottom = imgTop + $(n).height(); if(imgBottom>windowTop && imgTop<windowBottom){ $(n).attr('src',$(n).attr(options.src)).removeAttr(options.src); } }); }; } }); })(jQuery);
JQUERY插件形式。
后面会有附件可以下载
使用方式,引入jquery核心文件,和这个插件
<script type="text/javascript" src="jquery-1.8.2.min.js"></script> <script type="text/javascript" src="scrollLoad/jquery.scrollLoad.js"></script>
通过jquery选择器选择需要动态加载的图片,如果是整个页面所有的图片,下面是代码
$('img').scrollLoad();
可以提供1个对象参数,包含两个属性,
{ src:'xsrc', //预加载在<img> 中的属性值 如<img xsrc='img.jpg' /> delayTime:300 // 滚动条停止在一个地方超过300毫秒,才开始加载 }
src 默认存放图片路劲的属性名
delayTime 滚动到一个位置后延迟多少时间加载 单位毫秒。
下面是通过JS实现,方法和jquery一样,比较麻烦的地方是处理浏览器的兼容性。代码来自互联网,感谢!
var scrollLoad = (function (options) { var defaults = (arguments.length == 0) ? { src: 'xSrc', time: 300} : { src: options.src || 'xSrc', time: options.time ||300}; var camelize = function (s) { return s.replace(/-(\w)/g, function (strMatch, p1) { return p1.toUpperCase(); }); }; this.getStyle = function (element, property) { if (arguments.length != 2) return false; var value = element.style[camelize(property)]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = css ? css.getPropertyValue(property) : null; } else if (element.currentStyle) { value = element.currentStyle[camelize(property)]; } } return value == 'auto' ? '' : value; }; var _init = function () { // offsetPage 页面滚动条的为止 即页面页面可视区域顶端距离整个文档上方距离 // offsetWindow offsetPage+页面可视区域的高度 可视区域底部距离文档上方距离 var offsetPage = window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop, offsetWindow = offsetPage + Number(window.innerHeight ? window.innerHeight : document.documentElement.clientHeight), docImg = document.images, _len = docImg.length; if (!_len) return false; for (var i = 0; i < _len; i++) { var attrSrc = docImg[i].getAttribute(defaults.src), o = docImg[i], tag = o.nodeName.toLowerCase(); if (o) { //获取图像顶部距离整个页面的距离 postPage = o.getBoundingClientRect().top + window.document.documentElement.scrollTop + window.document.body.scrollTop; postWindow = postPage + Number(this.getStyle(o, 'height').replace('px', '')); //获取图像底部距离整个页面的距离 //如果图像上方在屏幕可视区域中间 或者 图像下方在屏幕区域 if ((postPage > offsetPage && postPage < offsetWindow) || (postWindow > offsetPage && postWindow < offsetWindow)) { if (tag === "img" && attrSrc !== null) { o.setAttribute("src", attrSrc); } o = null; } } }; window.onscroll = function () { setTimeout(function () { _init(); }, defaults.time); } }; return _init();//返回初始化函数 });
调用方法
scrollLoad();
参数同JQ
scrollLoad({time:300,scr:'xsrc'});
最后提一句,在HTML里 <img scr='1px.gif' xsrc /> 中图片路径部分最好填个1像素的图片,不然在IE下会有恶心的叉叉。。
当然也可以放一个动态的菊花!!
不过菊花还是作为背景较好,因为图片出现在可视区域,菊花就被替换了。看不到效果。
突然发现,没找到这个博客上传附件的地方,那就算了。
邪恶的多放几多菊花
--------------------------- END-------------------------------