关键词搜索

源码搜索 ×
×

滚屏到相应位置才加载图片

发布2012-03-09浏览4786次

详情内容

一个页面图片太多了就有压力。但如果总是分页,每页鸡碎那么多,用户又会很烦。

可以滚屏到相应位置才加载图片,这样就皆大欢喜了。

原理如下:

1、使用jquery

2、需要动态加载的<img>增加一个属性(自己创建的)data-url=真正图片路径,而将src=一个只有1像素的透明GIF,style设置一个不停地转圈的等待图片作为背景,class="scl"

3、相应的jquery对凡是class="scl"的,当屏幕可见时,就将data-url来替换src,这样就可以实现动态加载。在用户这边看来,拉动屏幕到这些图片,会看见它们由一个不停地转动的图片变为真正想看的图片。


代码如下:

jquery.scrollLoading.js

  1. /*!
  2. * jquery.scrollLoading.js
  3. * by zhangxinxu http://www.zhangxinxu.com
  4. * 2010-11-19 v1.0
  5. * 2012-01-13 v1.1 偏移值计算修改 position → offset
  6. */
  7. (function($) {
  8. $.fn.scrollLoading = function(options) {
  9. var defaults = {
  10. attr: "data-url"
  11. };
  12. var params = $.extend({}, defaults, options || {});
  13. params.cache = [];
  14. $(this).each(function() {
  15. var node = this.nodeName.toLowerCase(), url = $(this).attr(params["attr"]);
  16. if (!url) { return; }
  17. //重组
  18. var data = {
  19. obj: $(this),
  20. tag: node,
  21. url: url
  22. };
  23. params.cache.push(data);
  24. });
  25. //动态显示数据
  26. var loading = function() {
  27. var st = $(window).scrollTop(), sth = st + $(window).height();
  28. $.each(params.cache, function(i, data) {
  29. var o = data.obj, tag = data.tag, url = data.url;
  30. if (o) {
  31. post = o.offset().top; posb = post + o.height();
  32. if ((post > st && post < sth) || (posb > st && posb < sth)) {
  33. //在浏览器窗口内
  34. if (tag === "img") {
  35. //图片,改变src
  36. o.load(function() {
  37. o.removeClass("wimg");
  38. });
  39. o.attr("src", url);
  40. } else {
  41. o.load(url);
  42. }
  43. data.obj = null;
  44. }
  45. }
  46. });
  47. return false;
  48. };
  49. //事件触发
  50. //加载完毕即执行
  51. loading();
  52. //滚动执行
  53. $(window).bind("scroll", loading);
  54. };
  55. })(jQuery);

页面

  1. <style type="text/css">
  2. .scl{background:url(/img/loading.gif) no-repeat center;}
  3. .wimg{width:300px;height:200px;}
  4. </style>

  1. <script type="text/javascript" src="/js/jquery.scrollLoading.js?ver=120308_3"></script>
  2. <script type='text/javascript' src='http://cbjs.baidu.com/js/m.js'></script>

                <a href='/show.aspx?id=33210947&i=1' target='_blank'><img class="scl" src='/img/pixel.gif' data-url="Uploadhttps://cdn.jxasp.com:9143/image/2/PicMiniSizehttps://cdn.jxasp.com:9143/image/2012-3-9https://cdn.jxasp.com:9143/image/201203090246063866.jpg"/></a><br/><a href='/show.aspx?id=33210947&i=1' target='_blank'>成熟女人艳如桃……(第一百零五辑)</a>

  1. <script type="text/javascript">
  2. $(function() {
  3. $(".scl").scrollLoading();
  4. });
  5. </script>

这里有一个问题,就是有时真正图片的尺寸不一定能事先知道,所以一般不指定 width 和 height。但这里暂代图片只有1像素,不指定足够大的尺寸,根本看不到不停地转圈等待那个效果;但如果指定了,比如width=300px,height=200px,那真正图片出来后,也只有这么大,并且看起来变形。解决办法是,加载前指定width=300px,height=200px,加载完成后,再将这个指定去掉。

所以我们定义了一个CSS class :.wimg{width:300px;height:200px;},加载完成后去掉这个wimg。jquery.scrollLoading.js中有这么一句:

  1. //图片,改变src
  2. o.load(function() {
  3. o.removeClass("wimg");
  4. });

参照文章

jQuery页面滚动图片等元素动态加载实现


相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载