zoukankan      html  css  js  c++  java
  • 网页动态加载图片 通过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-------------------------------

  • 相关阅读:
    mq概念
    Mac Xampp 安装redis 及 安装php-redis扩展
    rabbitmq死信队列(延迟队列)demo
    rabbitmq生产与消费测试
    RabbitMQ各方法详解
    Mac git old mode 100644 new mode 100755 mac目录权限问题
    mac安装redis
    msql创建用户并授权
    mac apache php 访问失败
    Kubernetes入门学习--在Ubuntu16.0.4安装配置Minikube
  • 原文地址:https://www.cnblogs.com/iu90/p/3072753.html
Copyright © 2011-2022 走看看