js 简写:
emmm....
无序预加载插件部分
有序预加载插件部分
预加载插件
有序加载的
使用无序加载
无序加载的
来做个笔记
通过设置html,body的height为100%来解决子元素设置height为100%不管用的情况。
因为高度为百分比是继承父元素的。
单引号 放在判断前面,细节处理。 width设置一个,图片按照比列变化。
e.stopPropagation();阻止事件冒泡
插件1,学会写插件
$.fn.extend -> $('#img').preload();
$.extend -> $.preload();
$.each(imgs,function(i,src)){
var imgObj = new Image();
$(imgObj).on('load error',function()){
$progress.html(Math.round((count+1)/len *100)+'%');
...
}
}
if('prew' === $(this).data('control')){
index = Math.max(0,--index);
}else{
index = Math.min(len-1,++index)
}
$.extend({
preload:function(imgs,opts){ 新增preload函数
new PreLoad(imgs,opts); //实例化
}
})
新增插件
window.onload = function(){ preload(); showPic(); }; var imgs = [ 'img/banner.jpg', 'img/pic01.jpg', 'img/pic02.jpg', 'img/pic03.jpg', 'img/2017_5_14_Bing_.jpg', 'img/2017_5_14_Bing_en-GB.jpg', 'img/butterfly.jpg', 'img/city.jpg', 'img/desert.jpg', 'img/flower.jpg', 'img/flowers.jpg' ], index = 0, len = imgs.length, count = 0, progress = document.getElementsByClassName("progress")[0], loading = document.getElementsByClassName("loading")[0]; var imgObj = []; function preload() { for (var i=0; i < len; i++) { imgObj[i] = new Image(); imgObj[i].src = imgs[i]; imgObj[i].onload = function() { progress.innerHTML = Math.round((count + 1) / len *100) + "%"; if (count >= len - 1) { loading.style.display = "none"; document.title = "1/" + len; } count++; } imgObj[i].onerror = function() { count++; } } }
2-2 不使用预加载的纯js代码:
window.onload = showPic; var imgs = ['img/banner.jpg', 'img/pic01.jpg', 'img/pic02.jpg', 'img/pic03.jpg'], index = 0, len = imgs.length; function showPic() { var btns = document.getElementsByClassName("btn"); var place = document.getElementById("img"); for (var i=0; i < btns.length; i++) { btns[i].onclick = function() { var control = this.getAttribute("data-control"); "prev" === control ? index = Math.max(0, --index) : index = Math.min(len - 1, ++index); document.title = (index + 1) + "/" + len; place.setAttribute("src",imgs[index]); } } }
当然,那数组imgs里面要换成你的各图片的src;文档结构和视频的一样。
编辑序列列表 快捷方式:
li*75>img[src="images/qqexpression/images$.gif" alt=""]
一、图片预加载的3个步骤
1、实例化一个Image对象。
2、监听它的load、error事件。
3、为src附上正确的图片路径。
(function($) {
// 面向对象
function PreLoad(imgs, options) {
this.imgs = (typeof imgs === 'string') ? [imgs] : imgs;
this.opts = $.extend({}, PreLoad.DEFAULTS, options); // options和PreLoad.DEFAULTS这2个对象融合,生成新的对象,将新对象返回给opts保存下来。
if (this.opts.order === 'ordered') {
this._ordered();
} else {
this._unordered(); // _表示只在函数内部使用,而不在外部调用
}
}
PreLoad.DEFAULTS = {
order: 'unordered', // 无序预加载
each: null, // 每一张图片加载完毕后执行
all: null // 所有图片加载完毕后执行
};
PreLoad.prototype._ordered = function() { //方法写在原型链上
var opts = this.opts, // 保存为局部变量
imgs = this.imgs,
len = imgs.length,
count = 0;
var imgObj = new Image();
load();
function load() {
$(imgObj).on('load error', function() {
opts.each && opts.each(count);
if (count >=len) {
// 所有图片已经加载完毕
opts.all && opts.all();
} else {
load();
}
count++;
});
imgObj.src = imgs[count];
}
},
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).on('load error', function() {
opts.each && opts.each(count); // 如果opts.each存在,执行opts.each方法
if (count >= len - 1) {
opts.all && opts.all();
}
count ++;
});
imgObj.src = src;
});
};
// 插件:①附在$.fn上(要选择一个元素);②直接跟在jquery对象,是一个工具函数。(工具方法)
// $.fn.extend -> $('#img').preload();
$.extend({
preload: function(imgs, opts) {
new PreLoad(imgs, opts);
}
});
})(jQuery);
一、禁止事件冒泡:e.stopPropagation
1、$btn.on('click',function(){e.stopPropagation});
btn点击事件冒泡到document,在点击btn的时候会触发document的隐藏事件,所以要阻止btn的事件冒泡,是处理btn,而不是document.