图片的懒加载

有时候在一个界面上需要加载很多的图片,为了提升用户体验,使网页响应速度快,我们有时候会对图片进行相应的处理。处理方法分为:预加载和懒加载。

一:懒加载

1、懒加载定义:也就是延迟加载。当访问一个页面的时候,先把img的路径放在自定义的一个属性(例如:data-original)上保存,此时图片是还没有加载的,因为没有设置src属性,浏览器是不会发出请求去下载图片。如果事先知道图片的路径,可以直接在html中设置data-original的值,如果data-original的值是通过后台发送过来,那么就得在js中设置data-original的值。然后满足一定条件的时候,在js中从自定义的属性data-original上读取出路径值,赋给src-即设置真正的路径,让图片显示出来。

2、懒加载优点:网页加载速度快,减轻服务器压力,节约流量,用户体验好。

二、预加载

1、预加载定义:也就是提前加载图片到浏览器中,当需要时,再从本地缓存中渲染。

2、预加载的方法:

      用css+js实现预加载

      仅用js实现预加载

      使用ajax实现预加载

     详情请参考链接:http://web.jobbole.com/86785/

三、懒加载和预加载的比较

  1、懒加载是延迟加载,对服务器、前端有一定的缓解压力

  2、预加载是提前加载到浏览器中,对服务器、前端有一定压力

四、懒加载的例子

     因为图片的地址是后台发回来的,所以需要在js中将地址赋给data-address(自己定义变量名)是。第一张图片不需要预加载,所以没有设置data-original。

    这里还使用了masterslider.js插件,所以在<head>里面还需要引入masterslider.js,masterslider.main.css,ms-showcase2.css

<script src="http://i.gtimg.cn/qzone/biz/gdt/lib/jquery/jquery-2.1.4.js?max_age=31536000"></script>
<script type='text/javascript' id='masterSliderJs' src='js/masterslider.min.js?v=91489dfd17'></script>
<link rel='stylesheet' href='css/ms-showcase2.css?v=e41f80ce12'/>
<link rel='stylesheet' href='css/masterslider.main.css?v=1dba4608d6'/>

1、html

    <article id="articleBox">
        <div class="ms-showcase2-template ms-dir-v"> 
            <!-- masterslider -->
            <div class="master-slider ms-skin-default" id="masterslider">
                <div class="ms-slide">
                    <img id="0" alt="lorem ipsum dolor sit"/> 
                    <img class="ms-thumb" alt="thumb" id="thumb0"/> 
                </div>  
                <div class="ms-slide">
                    <img id="1" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb1"/> 
                </div> 
                <div class="ms-slide">
                    <img id="2" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb2"/> 
                </div> 
                <div class="ms-slide">
                    <img id="3" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb3"/> 
                </div> 
                <div class="ms-slide">
                    <img id="4" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb4"/> 
                </div>
                <div class="ms-slide">
                    <img id="5" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb5"/> 
                </div>  
                <div class="ms-slide">
                    <img id="6" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb6"/> 
                </div> 
                <div class="ms-slide">
                    <img id="7" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb7"/> 
                </div> 
                <div class="ms-slide">
                    <img id="8" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb8"/> 
                </div> 
                <div class="ms-slide">
                    <img id="9" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb9"/> 
                </div>
                <div class="ms-slide">
                    <img id="10" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb10"/> 
                </div>
                <div class="ms-slide">
                    <img id="11" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb11"/> 
                </div>  
                <div class="ms-slide">
                    <img id="12" alt="lorem ipsum dolor sit" data-address=''/> 
                    <img class="ms-thumb" alt="thumb" id="thumb12"/> 
                </div>  
                <div class="ms-slide">
                    <img id="cropedBigImg" value='custom' alt="lorem ipsum dolor sit" data-address='' title="自定义背景"/> 
                    <img class="ms-thumb" value='custom' id="customImg" title="自定义背景" src="image/addIcon.png" alt="thumb" data-toggle="modal" data-target="#myModal""/> 
                </div>
            </div>
          <!-- end of masterslider --> 
        </div>
    </article>

2、css

body{
    width: 100%;
    min-width: 1380px;
    margin:0px;
    padding: 0px;
    /*position:relative;*/
    letter-spacing: 1px;
    font-size:15px;
    /*background-color: rgb(51, 51, 51);*/
    background-color: #edf0f2;
}

article{
    position: relative;
    padding: 0px;
    max-width:1000px;
    margin:87px auto;
    display:none;
}

3、js

$(function(){
	var activity_id = sessionStorage.getItem('activity_id'),
	    user_id = sessionStorage.getItem('user_id'),
        slider = null,  //调用masterSlider.js,生成滚动的对象
        viewFlag = 1;
        // 初始化masterSlider一些参数
        initialMasterSlider();

        // 请求微信墙样式,即设置data-address
	requestAllImgStyle();
	
	// 监听slider开始变化的事件,触发改变img的src时刻
	slider.api.addEventListener(MSSliderEvent.CHANGE_START,function(){
   		// slider每改变一屏的时候触发
   		var index = slider.api.index();
   		if( index != 0){
   			load2img(index);
   		}
        });
  
    // 懒加载图片
    function load2img(index){
    	var totalSlider = slider.api.count(),
    	    pageImg = null,
    	    imgSrc = '';

    	if( index == totalSlider-1 ){
    		// slider的下标从0开始,到了最后一张slider特殊处理
    		pageImg = $('#cropedBigImg');
    		imgSrc = pageImg.attr('data-address');
    		pageImg.attr('src',imgSrc);
    	}else{
    		pageImg = $('#'+index),
    		imgSrc = pageImg.attr('data-address');
    		pageImg.attr('src',imgSrc);
    	}
    }

    // 设置masterSlider.js的一些参数
    function initialMasterSlider(){
    	slider = new MasterSlider();
    	// 设置大图容器的属性:最大的宽度和最大的高度
		slider.setup('masterslider' , {
			width:900,                     
			height:450,
			space:5,
			view:'flow'
		});
		slider.control('arrows');	
		slider.control('scrollbar' , {dir:'h'});	
		slider.control('thumblist' , {autohide:false ,dir:'v',arrows:false});
    }

	// 初始化的时候请求所有的样式
	function requestAllImgStyle(){
		var url = globalConfig.pre_api_url + "/wxwall_api/activity/get_wall_styles.php",
			data = {
				'activity_id':activity_id
			};
		request(url,data,function(res){
			console.log(res.msg);
			var data = res.data;
			if( data == false || data == undefined ){
				error_prompt_alert('没有获取到数据');
				$('#loding').hide();
			}else{
				addWallStyleToDOM(data);
			}
		});
	}

	// 将获取到的所有微信墙的样式加载到DOM里面
	function addWallStyleToDOM(datas){
		var len = datas.length,
			data = null,
			i = 0,
			div_list = '',
			en_name = '',
			ch_name = '',
			bigImgPreURL = globalConfig.pre_api_url + "/wall/style",
			smallImgPreURL = globalConfig.pre_api_url + '/img',
			bigImgSrc = '',
			smallImgSrc = '',
			bigImgObj = null,
            smallImgObj = null,
            cropedImgObj = $('#cropedBigImg');

		for( ;i<len;i++ ){
			data = datas[i];
			en_name = data.en_name;
			ch_name = data.ch_name;
			bigImgObj = $('#'+i);
			smallImgObj = $('#thumb'+i);

			// 图片路径
			if( en_name == 'custom' ){
				// 自定义微信墙样式
				bigImgSrc = bigImgPreURL + '/' + en_name + '/images/' + activity_id + '/kuxuan.jpg';
				smallImgSrc = smallImgPreURL + '/custom_style/' + activity_id +'/' + en_name +'.jpg';
			}else{
				bigImgSrc = bigImgPreURL + '/' + en_name + '/images/kuxuan.jpg';
				smallImgSrc = smallImgPreURL + '/' + en_name +'.jpg';
			}
			// 第一张不需要懒加载
			if( i == 0 ){
				bigImgObj.attr('src',bigImgSrc);
			}else{
				bigImgObj.attr('data-address',bigImgSrc);
			}
			
			bigImgObj.attr('value',en_name);
			bigImgObj.attr('title',ch_name);
			smallImgObj.attr('src',smallImgSrc);
			smallImgObj.attr('value',en_name);
			smallImgObj.attr('title',ch_name);
			if( i == len-1 ){
		        // 显示“我选这张”按钮和article   src="image/addIcon.png"
		        	$('#cropedBigImg').attr('data-address','image/addIcon.png');
		            viewFlag = 3;
     				viewRefresh(viewFlag); 
			}
		}
		                 
	}
});

下面这段代码是触发设置src的时刻

slider.api.addEventListener(MSSliderEvent.CHANGE_START,function(){
   		// slider每改变一屏的时候触发
   		var index = slider.api.index();
   		if( index != 0){
   			load2img(index);
   		}
    });

下面这段代码是设置src

// 懒加载图片
    function load2img(index){
    	var totalSlider = slider.api.count(),
    	    pageImg = null,
    	    imgSrc = '';

    	if( index == totalSlider-1 ){
    		// slider的下标从0开始,到了最后一张slider特殊处理
    		pageImg = $('#cropedBigImg');
    		imgSrc = pageImg.attr('data-address');
    		pageImg.attr('src',imgSrc);
    	}else{
    		pageImg = $('#'+index),
    		imgSrc = pageImg.attr('data-address');
    		pageImg.attr('src',imgSrc);
    	}
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值