`

图片预加载学习(三):无序加载之图片切换

阅读更多

先来张效果图:

基本业务:

点击“表情”字样或“图标”时显示“表情加载中,请稍后...” 的提示信息,等所有的表情都加载完成了再显示出来。

 

接下来还是那几句:

 

这个特效是跟着慕课网上的视频学的,视频链接如下:https://www.imooc.com/learn/502
源码和技术点已经上传到附件,有需要的可以查看、下载。

 

下面直接上代码(PS:代码中的注释是根据个人理解添加的,并不是老师原有的注释):

1、页面基本结构

<div class="box">
	<a href="javascript:void(0);" id="face-btn">表情</a>
	
	<div class="panel">
		<p class="loading">表情加载中,请稍后...</p>
		<!--
		<ul class="list">
			<li><img src="emotion/ldw/w_0001.gif"/></li>
			<li><img src="emotion/ldw/w_0002.gif"/></li>			
		</ul>
		-->	
	</div>
</div>

2、CSS样式

<style>
  body,p,ul,li{
	 margin: 0;
	 padding: 0;
  }
  body{background-color: #eee;}
  a{text-decoration: none;outline:none;}
  .box{margin:150px 0 0 200px;}
  #face-btn{
  	display:block;
  	background: url(qq-icon.png) no-repeat 0 0px;
	width:225px;
	height:225px;
	background-size:12% 12%;
	text-indent:28px;
	color:#333;
	line-height:25px;
	font-size:23px;
  }	
  .panel{
	width:460px;
	padding:2px;
	border:1px solid #ccc;
	background-color:#fff;
	position:relative;
	top:-190px;
	display:none;
  }
  .loading{
	text-align:center;
  }
  .list li{
	display:inline-block;
	width:50px;
	height:50px;
	border:1px solid #fff;
	margin-right:5px;
	margin-bottom:5px;
	cursor:pointer;
  }
.list li:hover{
	border-color:#06c;
}
</style>

 

3、JS代码

$(function(){
	var $btn = $("#face-btn");
	var $panel = $(".panel");
	var $loading = $(".loading");
	var len = 32;//图片数量
	var emotions = [];//表情集合
	
	//添加表情集合
	for(var i=0;i<len;i++){
		if(i<9){
			emotions[i]="emotion/ldw/w_000"+(i+1)+".gif";
		}else{
			emotions[i]="emotion/ldw/w_00"+(i+1)+".gif";
		}	
	}

	//点击“表情”时,显示表情加载的区域
	$btn.click(function(ev){
		ev.stopPropagation();//阻止冒泡
		if($(".list").length>0){//说明已经加载过图片了
			if($(".list").is(":visible")){//处于显示状态,那么隐藏掉
				$panel.hide();
			}else{//隐藏状态,那么显示
				$panel.show();
			}
			return false;
		}
		//还没有加载过,那么进行加载
		$panel.show();//图片正在加载的提示显示出来
		//预加载各张图片
		$.preload(emotions,{
			all:function(){//全部加载完成之后
				var html = "<ul class=\"list\">";
				for(var i=0;i<len;i++){
					html+="<li><img src=\""+emotions[i]+"\"/></li>";
				}
				html += "</ul>";
				$panel.append(html);//显示图片
				$loading.hide();//隐藏“图片正在加载的提示”
			}			
		});
	});
	
	//点击页面空白处时隐藏表情
	$(document).click(function(){
		if($(".list").is(":visible")){//处于显示状态,那么隐藏掉
			$panel.hide();
		}
	});
});

其中preload()是使用的第一篇中的插件,代码如下:

//图片预加载

//使用闭包模拟局部作用域
/*
(function(){
})();
*/

//传入jQuery对象,用$来接收,这样子就可以使用jQuery了
/*
(function($){
})(jQuery);
*/

(function($){
	//构造函数
	//imgs:图片数组
	//options:参数
	function PreLoad(imgs,options){
		//若传入图片数组的是字符串,手动转成数组
		this.imgs = ((typeof imgs)==="string"?[imgs]:imgs);
		
		//将传入的options参数替换掉默认的PreLoad.DEFAULTS,生成一个新的对象,并返回给this.opts
		this.opts = $.extend({},PreLoad.DEFAULTS,options);
		
		//无序方法:下划线表示这个方法只在内部使用,不提供外部调用
		this._unordered();
	}
	
	//设置默认参数
	PreLoad.DEFAULTS={
		each:null,//每一张图片加载完成后执行
		all:null//所有图片加载完成后执行
	};
	
	//在原型上添加无序加载的代码
	PreLoad.prototype._unordered=function(){
		//预加载各张图片
		var imgs = this.imgs,
			opts = this.opts,
			count = 0,
			len = imgs.length;
		$.each(imgs,function(i,src){
			if(typeof src != "string"){ return ;}//不是字符串直接返回
			
			var imgObj = new Image();
			imgObj.src = src;
			//正常加载或加载失败都执行该方法,以避免“加载失败时页面一直都显示正在加载数据”的问题
			$(imgObj).bind("load error",function(){
				opts.each && opts.each(count);
				//当图片预加载完成显示第一张图片的信息
				if(count>=len-1){
					//显示图片
					opts.all && opts.all();//若是有all就调用all()方法
				}
				count++;
			});
		});
	};
	
	//定义一个工具方法
	$.extend({
		preload:function(imgs,opts){
			new PreLoad(imgs,opts);
		}
	});
})(jQuery);

//插件学习方法:http://www.imooc.com/video/14434/0

最后,感谢老师,也祝大家好运!

分享到:
评论

相关推荐

    图片预加载学习(一):无序加载之图片切换

    本文将深入探讨“图片预加载学习(一):无序加载之图片切换”的主题,主要涵盖以下几个方面: 1. **图片预加载的意义**: 图片预加载的主要目标是提前下载用户可能需要的图片资源,避免用户在浏览网页时因为图片...

    jquery图片切换案例

    9. **预加载效果**:在图片加载之前,可以展示占位符或加载动画,提高用户体验。使用`.load()`事件监听图片加载状态。 在实际应用中,可以根据需求选择或组合这些案例,同时也可以利用jQuery插件如`swiper`、`...

    图片,菜单式图片,不停的变换

    7. **图片预加载**:为了提升用户体验,避免图片加载延迟,可能会使用JavaScript进行图片预加载,确保用户在切换到下一张图片时能立即看到完整的内容。 8. **交互设计**:菜单式图片可能还包含用户交互元素,如左右...

    JavaScript_JQuery_CSS_CSS_DIV漂亮的实例123个

    13. jQuery仿新浪新闻图片浏览器(支持鼠标左右滚动控制图片切换) 14. jquery仿苏宁易购商城产品图片全方位展示功能 15. jquery制作漂亮按钮示例打包 16. jQuery动态切换网页背景的大块图片的导航栏代码 17. ...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    38.jquery异步加载图片的插件jqGalScroll下载 39.jquery微型相册插件Micro Image Gallery下载 40.jQuery把图片放大及变亮特效插件下载 41.jquery拖动滚动条控制图片滚动及图片放大特效的示例 42.jquery旋转...

    100多个JQuery效果示例(实例)div+css+javascrpit

    87. 分享多款jQuery图片预加载切换效果(上下滚动、淡入淡出渐变等) 88. 动感十足jquery仿腾讯图片滚动浏览功能(带左右控制按钮)MovingBoxes插件下载 89. 参考JQZOOM插件使用jQuery仿京东网产品展示切换及放大效果...

    jquery 动态示例

    87. 分享多款jQuery图片预加载切换效果(上下滚动、淡入淡出渐变等) 88. 动感十足jquery仿腾讯图片滚动浏览功能(带左右控制按钮)MovingBoxes插件下载 89. 参考JQZOOM插件使用jQuery仿京东网产品展示切换及放大效果...

    JavaScript_JQuery_CSS_DIV漂亮的实例

    87. 分享多款jQuery图片预加载切换效果(上下滚动、淡入淡出渐变等) 88. 动感十足jquery仿腾讯图片滚动浏览功能(带左右控制按钮)MovingBoxes插件下载 89. 参考JQZOOM插件使用jQuery仿京东网产品展示切换及放大效果...

    JavaScript实现PC端横向轮播图

    JavaScript 实现PC端横向轮播图是一种常见的网页交互效果,用于展示多张图片或内容,让用户可以方便地...在实际开发中,还可以考虑添加更多的功能,如图片预加载、触摸事件支持、动态加载更多图片等,以提升用户体验。

    JS实现列表式摄影作品展示代码

    3. **图片加载**:使用`new Image()`创建图片对象预加载图片,确保在展示时图片已经完全加载。 4. **动画效果**:通过改变CSS属性(如`opacity`、`transform`等)来添加过渡动画,提高用户体验。 5. **响应式设计**...

    简单的jquery轮播效果

    5. **预加载图片**:通过JavaScript预加载即将显示的图片,减少加载时的延迟。 通过不断迭代和改进,你可以构建出更强大、更灵活的jQuery轮播插件,以满足各种应用场景的需求。 总的来说,jQuery轮播效果是网页...

    60个实用的jQuery代码片段.pdf

    15. **预加载图片**:预加载图片以优化用户体验,`$.ajax({url: "image.jpg", type: "GET", cache: true})`。 16. **事件委托**:使用`on()`方法进行事件委托,如`$("#container").on("click", ".target", function...

    FckEditor使用积累

    1. **编辑器无法加载**:检查路径是否正确,确保所有依赖文件已加载。 2. **图片上传失败**:检查上传设置,确保有权限写入文件,并配置好上传路径。 3. **样式显示异常**:确保你的CSS样式与编辑器兼容,避免使用...

    html+css+js总结笔记

    - **`&lt;pre&gt;`**:预格式化文本。保留所有空白字符,如空格和换行符。 - **`&lt;marquee&gt;`**:滚动显示文本或图像。这是一个非标准标签,在现代 Web 开发中不推荐使用。 - **`&lt;dl&gt;`**、**`&lt;dt&gt;`** 和 **`&lt;dd&gt;`**:定义...

    凡客诚品页面模板.zip

    4. **CSS属性**:如`color`定义文字颜色,`background-color`设定背景色,`font-size`调整字体大小,`margin`和`padding`控制元素的边距和内填充,`display`属性可以切换元素的显示方式(如块级元素、行内元素或隐藏...

    网页前端高级编程-实验报告-网站综合制作.doc

    首先,通过`querySelectorAll`选取所有的图片元素,然后设置定时器`setInterval`每隔一定时间自动切换图片。在切换过程中,使用`for`循环改变图片的显示状态。当鼠标悬浮在分页上时,停止轮播,离开时恢复。关键代码...

    视频播放+列表

    通过`&lt;video&gt;`标签,我们可以指定视频源(src)、设置宽度和高度、添加预加载和控制选项等。例如: ```html Your browser does not support the video tag. ``` 控制属性(controls)会显示播放、暂停、...

    jquery 插件集合(最全)

    接着是**jQuery TABPANEL**,TabPanel通常用于将大量内容分隔到不同的面板中,每个面板对应一个标签页,用户可以通过点击标签切换显示内容。jQuery Tab插件提供了创建和管理这些标签页的功能,支持动态加载内容、...

    前端网页设计-旅游城市介绍-html+css+javascript

    3. **AJAX (Asynchronous JavaScript and XML)**: 用于异步加载新的数据,如城市信息、图片或评论,无需刷新整个页面。 4. **表单验证**: 检查用户输入的有效性,如邮箱格式、必填项等。 5. **动画效果**: 使用...

Global site tag (gtag.js) - Google Analytics