为了账号安全,请及时绑定邮箱和手机立即绑定

IE 8-10 图片加载不出来

为什吗我的IE10——IE8图片都加载不出来,只有转圈圈的背景图?

正在回答

5 回答

(-。-;)额这个怎么调试?一大堆看着犯晕。。。代码看过去好像没啥问题,readystate中”S“应该大写,不过应该不是这个问题,你看一下报错信息,自己调试一下,如果没有报错信息,可能跟图片的先后加载浏览器的渲染有关,解决了望告知下,菜鸟能力有限没帮上忙,不好意思啦,哦,还有提个小建议:把自己这些代码放在github或者codepen这类代码托管上,方便大家帮忙调试吧

0 回复 有任何疑惑可以回复我~
#1

Sweet_Gao 提问者

3Q!!! *^_^* 把328行代码this.readyState == "complete" 中readystate中 S 改为大写就好了。
2016-05-10 回复 有任何疑惑可以回复我~
#2

Sweet_Gao 提问者

非常感谢!一个细节问题,困扰了我好久
2016-05-10 回复 有任何疑惑可以回复我~
#3

Ateem 回复 Sweet_Gao 提问者

不客气~
2016-05-10 回复 有任何疑惑可以回复我~

对认真学习,认真做笔记的同学点赞,即使看视频的时候,看不懂,也希望硬着头皮看下去,一遍一遍其意自现!!

1 回复 有任何疑惑可以回复我~
/*
	2016-4-27  gaot

	renderDom(): 渲染剩余的DOM(弹出层里面的内容),并且插入到BODY

	getGroup(): 根据当前组名获取同一组数据

	init(currentObject): 初始化弹出:获取当前点击对象currentObj的data-source、data-id,调用showMaskAndPop()显示遮罩层和弹出层
	
	showMaskAndPop(sourceSrc, currentId):显示遮罩层和弹出层:根据当前元素的id和src加载图片、显示图片描述、设置左右切换按钮是否disabled
	
	getIndexOf(currentId):根据当前点击的元素ID获取在当前组别里面的索引
	
	loadPicSize(sourceSrc):加载图片: 调用preLoadImg(src, callback)、changePic(picWidth, picHeight)
	preLoadImg(src, callback):预加载图片,设置src
	changePic(picWidth, picHeight):根据图片宽高和视口比例设置弹出层尺寸并过渡动画、获取图片描述内容
	
	goto(dir):左右切换上一张或下一张。dir可为"next"或"prev"

*/


;(function(){
	var LightBox = function(settings){
		var _this_ = this;	// this指的是LightBox

		//默认配置参数
		this.settings = {
			speed: 500
		};
		$.extend(this.settings, settings||{});

		//创建遮罩和弹出框
		this.popMask = $('<div id="G-lightbox-mask">');
		this.popWin = $('<div id="G-lightbox-pop">');

		//保存BODY
		this.bodyNode = $(document.body);

		//渲染剩余的DOM,并且插入到BODY
		this.renderDom();

		this.picViewArea = this.popWin.find("div.lightbox-pic-view"); // 图片预览区域
		this.popPic = this.popWin.find("img.lightbox-img"); // 图片
		this.picCaptionArea = this.popWin.find("div.lightbox-pic-caption"); // 图片描述区域
		this.nextBtn = this.popWin.find("span.lightbox-next-btn"); // "下一张"按钮
		this.prevBtn = this.popWin.find("span.lightbox-prev-btn"); // "上一张"按钮

		this.captionText = this.popWin.find("p.lightbox-pic-desc"); // 图片描述
		this.currentIndex = this.popWin.find("span.lightbox-of-index"); // 图片索引
		this.closeBtn = this.popWin.find("span.lightbox-close-btn"); // 关闭按钮

		//准备开发事件委托,获取组数据
		this.groupName = null; //组名
		this.groupData = []; //防止同一组数据
		this.bodyNode.delegate(".js-lightbox,*[data-role=lightbox]","click",function(e){
			//阻止事件冒泡
			e.stopPropagation();

			var currentGroupname = $(this).attr("data-group");
			if (currentGroupname != _this_.groupName) {
				_this_.groupName = currentGroupname;

				//根据当前组名获取同一组数据
				_this_.getGroup();
			}

			//初始化弹出
			_this_.initPop($(this));
		});

		//关闭弹出
		this.popMask.click(function(){
			$(this).fadeOut();
			_this_.popWin.fadeOut();
			_this_.clear = false; //关闭弹出,则清掉窗口调整事件
		});
		this.closeBtn.click(function(){
			_this_.popMask.fadeOut();
			_this_.popWin.fadeOut();
			_this_.clear = false; //关闭弹出,则清掉窗口调整事件
		});

		//绑定上下切换按钮事件
		this.flag = true; // 切换标识,用来表示一次切换是否完成,防止多次快速点击出错

		this.nextBtn.hover(function(){
			if (!$(this).hasClass("disabled") && _this_.groupData.length>1) {
				$(this).addClass("lightbox-next-btn-show");
			}
		}, function(){
			if (!$(this).hasClass("disabled") && _this_.groupData.length>1) {
				$(this).removeClass("lightbox-next-btn-show");
			}
		}).click(function(e){
			if (!$(this).hasClass("disabled") && _this_.flag) {
				_this_.flag = false; // 一次切换动画过程中,flag设为false
				e.stopPropagation();
				_this_.goto("next"); // nextBtn: 切换到下一张
			}
		});

		this.prevBtn.hover(function(){
			if (!$(this).hasClass("disabled") && _this_.groupData.length>1) {
				$(this).addClass("lightbox-prev-btn-show");
			}
		}, function(){
			if (!$(this).hasClass("disabled") && _this_.groupData.length>1) {
				$(this).removeClass("lightbox-prev-btn-show");
			}
		}).click(function(e){
			if (!$(this).hasClass("disabled") && _this_.flag) {
				_this_.flag = false; // 一次切换动画过程中,flag设为false
				e.stopPropagation();
				_this_.goto("prev"); // prevBtn: 切换到上一张
			}
		});

		//判断是不是IE6
		//this.isIE6 = /MSIE 6.0/gi.test(window.navigator.userAgent);

		//绑定窗口调整事件
		var timer = null;
		this.clear = false; // 窗口调整事件标识,用来表示是否监听窗口调整事件。false表示不监听

		$(window).resize(function(){
			if (_this_.clear) {
				window.clearTimeout(timer);
				timer = window.setTimeout(function(){
					_this_.loadPicSize(_this_.groupData[_this_.index].src);
				}, 500);

				if (_this_.isIE6) {
					_this_.popMask.css({
						width: $(window).width(),
						height: $(window).height()
					});
				}
			}
			
		}).keyup(function(e){
			var keyValue = e.which;
			if (_this_.clear) {
				if (keyValue==37 || keyValue==38) {	//37:←方向键,38:↑方向键
					_this_.prevBtn.click();
				}else if (keyValue==39 || keyValue==40) { //39:→方向键,40:↓方向键
					_this_.nextBtn.click();
				}
			}
		});

	};


	LightBox.prototype = {
		//渲染剩余的DOM,并且插入到BODY
		renderDom: function(){
			var strDom = '<div class="lightbox-pic-view">'
					   +	'<span class="lightbox-btn lightbox-prev-btn"></span>'
					   +	'<img class="lightbox-img" src="img/2-2.jpg">'
					   +	'<span class="lightbox-btn lightbox-next-btn"></span>'
					   + '</div>'
					   + '<div class="lightbox-pic-caption">'
					   +	 '<div class="lightbox-caption-area">'
					   +		 '<p class="lightbox-pic-desc">标题</p>'
					   +		 '<span class="lightbox-of-index">当前索引:0 of 0</span>'
					   +	 '</div>'
					   +	 '<span class="lightbox-close-btn"></span>'
					   + '</div>';
			
			//插入到this.popWin
			this.popWin.html(strDom);

			//把遮罩和弹出框插入到BODY
			this.bodyNode.append(this.popMask);
			this.bodyNode.append(this.popWin);
		},


		//获取同一组数据
		getGroup: function(){
			var _this_ = this;	// this指的是LightBox

			//根据当前组别名称获取页面中所有相同组别的对象
			var groupList = this.bodyNode.find("*[data-group="+this.groupName+"]");
			
			//清空数组数据
			_this_.groupData.length = 0;

			groupList.each(function(){
				_this_.groupData.push({
					src: $(this).attr("data-source"), // this指的是当前遍历的data-group=_this_.groupName的元素
					id: $(this).attr("data-id"),
					caption: $(this).attr("data-caption")
				});

			});

			//console.log(_this_.groupData);
		},


		//初始化弹出
		initPop: function(currentObj){
			var _this_ = this;	// this指的是LightBox

			var sourceSrc = currentObj.attr("data-source"),
				currentId = currentObj.attr("data-id");

			//console.log(sourceSrc+"  "+currentId);

			//显示遮罩层和弹框
			this.showMaskAndPop(sourceSrc, currentId);
		},


		//点击图片显示遮罩层和弹框
		showMaskAndPop: function(sourceSrc, currentId){
			var _this_ = this;	// this指的是LightBox

			//图片和图片描述区域影藏
			this.popPic.hide();
			this.picCaptionArea.hide();

			var winWidth = $(window).width(), // 当前视口宽度、高度
				winHeight = $(window).height();

			//图片预览区域宽、高
			this.picViewArea.css({  
				width: winWidth/2,
				height: winHeight/2
			});


			//遮罩层淡出
			this.popMask.fadeIn(); 

			//弹框淡出
			this.popWin.fadeIn();

			var viewHeight = winHeight/2+10;

			//弹框宽、高和位置
			this.popWin.css({
				width: winWidth/2+10,	//.lightbox-pic-view的border-width为5px
				height: winHeight/2+10,
				marginLeft: -(winWidth/2+10)/2,
				top: -viewHeight
			
			}).animate({
				top: (winHeight-viewHeight)/2
			}, _this_.settings.speed, function(){
				//加载图片
				_this_.loadPicSize(sourceSrc);
			});

			//根据当前点击的元素ID获取在当前组别里面的索引
			this.index = this.getIndexOf(currentId);

			var groupDataLength = this.groupData.length;
			if (groupDataLength > 1) {	// 如果一个组里的图片不止一张
				if (this.index === 0) { // 点击的是第一张
					this.prevBtn.addClass("disabled");
					this.nextBtn.removeClass("disabled");
				} else if (this.index === groupDataLength-1) { // 点击的是最后一张
					this.prevBtn.removeClass("disabled");
					this.nextBtn.addClass("disabled");
				} else {
					this.prevBtn.removeClass("disabled");
					this.nextBtn.removeClass("disabled");
				}
			}else {
				this.prevBtn.addClass("disabled");
				this.nextBtn.addClass("disabled");
			}
		},
		

		//根据当前点击的元素ID获取在当前组别里面的索引
		getIndexOf: function(currentId){
			var index = 0;

			$(this.groupData).each(function(i){
				index = i;
				if (this.id === currentId) {
					return false; 	// 相当于break
				}
			});

			return index;
		},


		//加载图片
		loadPicSize: function(sourceSrc){
			var _this_ = this;

			//每次加载之前先把上一次打开的图片的宽高清除掉,保证下一次加载的宽高是新打开的图片的宽高
			this.popPic.css({width: "auto", height: "auto"}).hide();

			this.picCaptionArea.hide();

			// 预加载图片,设置scr
			this.preLoadImg(sourceSrc, function(){
				_this_.popPic.attr("src", sourceSrc);

				var picWidth = _this_.popPic.width(),
					picHeight = _this_.popPic.height();

				// 根据图片宽高和视口比例设置弹出层尺寸并过渡动画、获取图片描述内容
				_this_.changePic(picWidth, picHeight);

			});
		},


		// 预加载图片,设置scr
		preLoadImg: function(src, callback){
			var img = new Image();
			if (!!window.ActiveXObject) {
				img.onreadystatechange = function(){
					if (this.readystate == "complete") {
						callback();
					}
				};
			}else{
				img.onload = function(){
					callback();
				};
			}

			img.src = src;

			//console.log(img.src);
		},


		// 根据图片宽高和视口比例设置弹出层尺寸并过渡动画、获取图片描述内容
		changePic: function(width, height){
			var _this_ = this;

			var winWidth = $(window).width(),
				winHeight = $(window).height();

			//如果图片的宽高大于浏览器视口的宽高比例,就看下是否溢出
			var scale = Math.min(winWidth/(width+10), winHeight/(height+10), 1);

			width = width*scale;
			height = height*scale;

			this.picViewArea.animate({
				width: width-10,
				height: height-10
			}, _this_.settings.speed);

			//弹窗动画:宽、高、位置
			var top = (winHeight-height)/2;

			if (this.isIE6) {
				top += $(window).scrollTop();
			}

			this.popWin.animate({
				width: width,
				height: height,
				marginLeft: -(width/2),
				top: top
			
			}, _this_.settings.speed, function(){
				_this_.popPic.css({
					width: width-10,
					height: height-10
				}).fadeIn();

				_this_.picCaptionArea.fadeIn();
				_this_.flag = true; // 一次切换动画结束,flag设为true
				_this_.clear = true; // clear为true:弹框出现时,加上窗口调整事件
			});

			//设置描述文字和当前索引
			this.captionText.text(this.groupData[this.index].caption);
			this.currentIndex.text("当前索引:" + (this.index+1) + " of " + this.groupData.length);
		
			//console.log(this.currentIndex.text());
		},

		//左右切换上一张或下一张
		goto: function(dir){
			if (dir === "next") { // 下一张:nextBtn
				this.index++;
				if (this.index >= this.groupData.length-1) { //如果是最后一张,影藏掉"下一张"按钮,设为不能点击
					this.nextBtn.addClass("disabled").removeClass("lightbox-next-btn-show");
				}
				if (this.index !=0) { //如果不是第一张,"上一张"按钮去掉影藏样式
					this.prevBtn.removeClass("disabled");
				}

				var src = this.groupData[this.index].src;
				this.loadPicSize(src);

			} else if (dir === "prev") { // 上一张:prevBtn
				this.index--;
				if (this.index <=0 ) { //如果是第一张,影藏掉"上一张"按钮,设为不能点击
					this.prevBtn.addClass("disabled").removeClass("lightbox-prev-btn-show");
				}
				if (this.index != this.groupData.length-1) { //如果不是最后一张,"下一张"按钮去掉影藏样式
					this.nextBtn.removeClass("disabled");
				}

				var src = this.groupData[this.index].src;
				this.loadPicSize(src);
			}
		}


	};

	window["LightBox"] = LightBox;
})();


0 回复 有任何疑惑可以回复我~
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>LightBox插件开发</title>

	<link rel="stylesheet" type="text/css" href="css/lightbox.css">
</head>

<body>
	 
		class="js-lightbox":表示这个元素要启用lightbox<br>
		data-role="lightbox":表示这个元素要启用lightbox<br>
		data-source="img/1-1.jpg":原图的地址<br>
		data-group="group-1":标识当前是否属于一个组别<br>
		data-id="kggnnnmmm":图片的唯一标识<br>
		data-caption="kgg111": 当前图片的描述文字<br><br>
	

	<h1>1组图片</h1>
	<div>
		<img class="js-lightbox" data-role="lightbox" data-source="img/1-1.jpg" src="img/1-1.jpg" 
			 data-group="group-1" data-id="1.1" data-caption="group1:1" width="100" height="100">
		<img class="js-lightbox" data-role="lightbox" data-source="img/1-2.jpg" src="img/1-2.jpg"
			 data-group="group-1" data-id="1.2" data-caption="group1:2" width="100" height="100">
		<img class="js-lightbox" data-role="lightbox" data-source="img/1-3.jpg" src="img/1-3.jpg"
			 data-group="group-1" data-id="1.3" data-caption="group1:3" width="100" height="100">
	</div>

	<h1>2组图片</h1>
	<div>
		<img class="js-lightbox" data-role="lightbox" data-source="img/2-1.jpg" src="img/2-1.jpg"
			 data-group="group-2" data-id="kggnnn2-1" data-caption="group2:1" width="100" height="100">
	</div>



	<!-- 遮罩层 -->
	<!-- <div id="G-lightbox-mask"></div> -->
	<!-- 弹出层 -->
	<!-- <div id="G-lightbox-pop">
		<div class="lightbox-pic-view">
			<span class="lightbox-btn lightbox-prev-btn lightbox-prev-btn-show"></span>
			<img class="lightbox-img" src="img/2-2.jpg" width="100%">
			<span class="lightbox-btn lightbox-next-btn lightbox-next-btn-show"></span>
		</div>
		<div class="lightbox-pic-caption">
			<div class="lightbox-caption-area">
				<p class="lightbox-pic-desc">图片标题</p>
				<span class="lightbox-of-index">当前索引:1 of 4</span>
			</div>
			<span class="lightbox-close-btn"></span>
		</div>
	</div> -->

	<!-- 引入js文件 -->
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/lightbox.js"></script>
	
	<script type="text/javascript">
		$(function(){
			var lightbox = new LightBox({
				speed: 600,
				maxWidth: 900,
				maxHeight: 600,
				maskOpacity: 0.4
			});
		});
	</script>

</body>
</html>


0 回复 有任何疑惑可以回复我~

没遇到这个,只是在写的时候遇到在chrome下没有等图片加载完,就把结构定好了,然后图片再渲染上去的时候布局出错,这个可能跟chrome的渲染机制有关,最后加了$(window).on("load",function(){})就没事了,虽然答非所问,不过你可以放你具体代码出来,给你debug下。

0 回复 有任何疑惑可以回复我~
#1

Sweet_Gao 提问者

下面是我的html和js代码,在IE10以下图片都出不来,IE11可以,chrome也可以
2016-05-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

IE 8-10 图片加载不出来

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信