请老师帮忙找错,敲到这里测试有错,找不到,应该是这段代码写错了

来源:3-4 楼层HTML结构的按需加载--全部加载完毕后的收尾工作

迷失的小麦

2020-02-18 17:23:16

// JavaScript Document
var $floor=$('.floor');
var $win=$(window);
var $doc=$(document);

var floorData = [{
		num:'1',
        zi: '',
        text: '服装鞋包',
        tabs: ['大牌', '男装', '女装'],
        items: [
            [{
                name: '匡威男棒球开衫外套2015',
                price: 479
            }, {
                name: 'adidas 阿迪达斯 训练 男子',
                price: 335
            }, {
                name: '必迈BMAI一体织跑步短袖T恤',
                price: 159
            }, {
                name: 'NBA袜子半毛圈运动高邦棉袜',
                price: 65
            }, {
                name: '特步官方运动帽男女帽子2016',
                price: 69
            }, {
                name: 'KELME足球训练防寒防风手套',
                price: 4999
            }, {
                name: '战地吉普三合一冲锋衣',
                price: 289
            }, {
                name: '探路者户外男士徒步鞋',
                price: 369
            }, {
                name: '羽绒服2015秋冬新款轻薄男士',
                price: 399
            }, {
                name: '溯溪鞋涉水鞋户外鞋',
                price: 689
            }, {
                name: '旅行背包多功能双肩背包',
                price: 269
            }, {
                name: '户外旅行双肩背包OS0099',
                price: 99
            }],
            [{
                name: '匡威男棒球开衫外套2015',
                price: 479
            }, {
                name: 'adidas 阿迪达斯 训练 男子',
                price: 335
            }, {
                name: '必迈BMAI一体织跑步短袖T恤',
                price: 159
            }, {
                name: 'NBA袜子半毛圈运动高邦棉袜',
                price: 65
            }, {
                name: '特步官方运动帽男女帽子2016',
                price: 69
            }, {
                name: 'KELME足球训练防寒防风手套',
                price: 4999
            }, {
                name: '战地吉普三合一冲锋衣',
                price: 289
            }, {
                name: '探路者户外男士徒步鞋',
                price: 369
            }, {
                name: '羽绒服2015秋冬新款轻薄男士',
                price: 399
            }, {
                name: '溯溪鞋涉水鞋户外鞋',
                price: 689
            }, {
                name: '旅行背包多功能双肩背包',
                price: 269
            }, {
                name: '户外旅行双肩背包OS0099',
                price: 99
            }],
            [{
                name: '匡威男棒球开衫外套2015',
                price: 479
            }, {
                name: 'adidas 阿迪达斯 训练 男子',
                price: 335
            }, {
                name: '必迈BMAI一体织跑步短袖T恤',
                price: 159
            }, {
                name: 'NBA袜子半毛圈运动高邦棉袜',
                price: 65
            }, {
                name: '特步官方运动帽男女帽子2016',
                price: 69
            }, {
                name: 'KELME足球训练防寒防风手套',
                price: 4999
            }, {
                name: '战地吉普三合一冲锋衣',
                price: 289
            }, {
                name: '探路者户外男士徒步鞋',
                price: 369
            }, {
                name: '羽绒服2015秋冬新款轻薄男士',
                price: 399
            }, {
                name: '溯溪鞋涉水鞋户外鞋',
                price: 689
            }, {
                name: '旅行背包多功能双肩背包',
                price: 269
            }, {
                name: '户外旅行双肩背包OS0099',
                price: 99
            }]
        ]
    }, {
        num:'2',
		zi: '',
        text: '个护美妆',
        tabs: ['热门', '国际大牌', '国际名品'],
        items: [
            [{
                name: '韩束红石榴鲜活水盈七件套装',
                price: 169
            }, {
                name: '温碧泉八杯水亲亲水润五件套装',
                price: 198
            }, {
                name: '御泥坊红酒透亮矿物蚕丝面膜贴',
                price: 79.9
            }, {
                name: '吉列手动剃须刀锋隐致护',
                price: 228
            }, {
                name: 'Mediheal水润保湿面膜',
                price: 119
            }, {
                name: '纳益其尔芦荟舒缓保湿凝胶',
                price: 39
            }, {
                name: '宝拉珍选基础护肤旅行四件套',
                price: 299
            }, {
                name: '温碧泉透芯润五件套装',
                price: 257
            }, {
                name: '玉兰油多效修护三部曲套装',
                price: 199
            }, {
                name: 'LOREAL火山岩控油清痘洁面膏',
                price: 36
            }, {
                name: '百雀羚水嫩倍现盈透精华水',
                price: 139
            }, {
                name: '珀莱雅新柔皙莹润三件套',
                price: 99
            }],
            [{
                name: '韩束红石榴鲜活水盈七件套装',
                price: 169
            }, {
                name: '温碧泉八杯水亲亲水润五件套装',
                price: 198
            }, {
                name: '御泥坊红酒透亮矿物蚕丝面膜贴',
                price: 79.9
            }, {
                name: '吉列手动剃须刀锋隐致护',
                price: 228
            }, {
                name: 'Mediheal水润保湿面膜',
                price: 119
            }, {
                name: '纳益其尔芦荟舒缓保湿凝胶',
                price: 39
            }, {
                name: '宝拉珍选基础护肤旅行四件套',
                price: 299
            }, {
                name: '温碧泉透芯润五件套装',
                price: 257
            }, {
                name: '玉兰油多效修护三部曲套装',
                price: 199
            }, {
                name: 'LOREAL火山岩控油清痘洁面膏',
                price: 36
            }, {
                name: '百雀羚水嫩倍现盈透精华水',
                price: 139
            }, {
                name: '珀莱雅新柔皙莹润三件套',
                price: 99
            }],
            [{
                name: '韩束红石榴鲜活水盈七件套装',
                price: 169
            }, {
                name: '温碧泉八杯水亲亲水润五件套装',
                price: 198
            }, {
                name: '御泥坊红酒透亮矿物蚕丝面膜贴',
                price: 79.9
            }, {
                name: '吉列手动剃须刀锋隐致护',
                price: 228
            }, {
                name: 'Mediheal水润保湿面膜',
                price: 119
            }, {
                name: '纳益其尔芦荟舒缓保湿凝胶',
                price: 39
            }, {
                name: '宝拉珍选基础护肤旅行四件套',
                price: 299
            }, {
                name: '温碧泉透芯润五件套装',
                price: 257
            }, {
                name: '玉兰油多效修护三部曲套装',
                price: 199
            }, {
                name: 'LOREAL火山岩控油清痘洁面膏',
                price: 36
            }, {
                name: '百雀羚水嫩倍现盈透精华水',
                price: 139
            }, {
                name: '珀莱雅新柔皙莹润三件套',
                price: 99
            }]
        ]
    }, {
		num:'3',
        zi: '',
        text: '手机通讯',
        tabs: ['热门', '品质优选', '新机尝鲜'],
        items: [
            [{
                name: '摩托罗拉 Moto Z Play',
                price: 3999
            }, {
                name: 'Apple iPhone 7 (A1660)',
                price: 6188
            }, {
                name: '小米 Note 全网通 白色',
                price: 999
            }, {
                name: '小米5 全网通 标准版 3GB内存',
                price: 1999
            }, {
                name: '荣耀7i 海岛蓝 移动联通4G手机',
                price: 1099
            }, {
                name: '乐视(Le)乐2(X620)32GB',
                price: 1099
            }, {
                name: 'OPPO R9 4GB+64GB内存版',
                price: 2499
            }, {
                name: '魅蓝note3 全网通公开版',
                price: 899
            }, {
                name: '飞利浦 X818 香槟金 全网通4G',
                price: 1998
            }, {
                name: '三星 Galaxy S7(G9300)',
                price: 4088
            }, {
                name: '华为 荣耀7 双卡双待双通',
                price: 1128
            }, {
                name: '努比亚(nubia)Z7Max(NX505J)',
                price: 728
            }],
            [{
                name: '摩托罗拉 Moto Z Play',
                price: 3999
            }, {
                name: 'Apple iPhone 7 (A1660)',
                price: 6188
            }, {
                name: '小米 Note 全网通 白色',
                price: 999
            }, {
                name: '小米5 全网通 标准版 3GB内存',
                price: 1999
            }, {
                name: '荣耀7i 海岛蓝 移动联通4G手机',
                price: 1099
            }, {
                name: '乐视(Le)乐2(X620)32GB',
                price: 1099
            }, {
                name: 'OPPO R9 4GB+64GB内存版',
                price: 2499
            }, {
                name: '魅蓝note3 全网通公开版',
                price: 899
            }, {
                name: '飞利浦 X818 香槟金 全网通4G',
                price: 1998
            }, {
                name: '三星 Galaxy S7(G9300)',
                price: 4088
            }, {
                name: '华为 荣耀7 双卡双待双通',
                price: 1128
            }, {
                name: '努比亚(nubia)Z7Max(NX505J)',
                price: 728
            }],
            [{
                name: '摩托罗拉 Moto Z Play',
                price: 3999
            }, {
                name: 'Apple iPhone 7 (A1660)',
                price: 6188
            }, {
                name: '小米 Note 全网通 白色',
                price: 999
            }, {
                name: '小米5 全网通 标准版 3GB内存',
                price: 1999
            }, {
                name: '荣耀7i 海岛蓝 移动联通4G手机',
                price: 1099
            }, {
                name: '乐视(Le)乐2(X620)32GB',
                price: 1099
            }, {
                name: 'OPPO R9 4GB+64GB内存版',
                price: 2499
            }, {
                name: '魅蓝note3 全网通公开版',
                price: 899
            }, {
                name: '飞利浦 X818 香槟金 全网通4G',
                price: 1998
            }, {
                name: '三星 Galaxy S7(G9300)',
                price: 4088
            }, {
                name: '华为 荣耀7 双卡双待双通',
                price: 1128
            }, {
                name: '努比亚(nubia)Z7Max(NX505J)',
                price: 728
            }]
        ]
    }, {
        num:'4',
		zi: '',
        text: '家用电器',
        tabs: ['热门', '大家电', '生活电器'],
        items: [
            [{
                name: '暴风TV 超体电视 40X 40英寸',
                price: 1299
            }, {
                name: '小米(MI)L55M5-AA 55英寸',
                price: 3699
            }, {
                name: '飞利浦HTD5580/93 音响',
                price: 2999
            }, {
                name: '金门子H108 5.1套装音响组合',
                price: 1198
            }, {
                name: '方太ENJOY云魔方抽油烟机',
                price: 4390
            }, {
                name: '美的60升预约洗浴电热水器',
                price: 1099
            }, {
                name: '九阳电饭煲多功能智能电饭锅',
                price: 159
            }, {
                name: '美的电烤箱家用大容量',
                price: 329
            }, {
                name: '奥克斯(AUX)936破壁料理机',
                price: 1599
            }, {
                name: '飞利浦面条机 HR2356/31',
                price: 665
            }, {
                name: '松下NU-JA100W 家用蒸烤箱',
                price: 1799
            }, {
                name: '飞利浦咖啡机 HD7751/00',
                price: 1299
            }],
            [{
                name: '暴风TV 超体电视 40X 40英寸',
                price: 1299
            }, {
                name: '小米(MI)L55M5-AA 55英寸',
                price: 3699
            }, {
                name: '飞利浦HTD5580/93 音响',
                price: 2999
            }, {
                name: '金门子H108 5.1套装音响组合',
                price: 1198
            }, {
                name: '方太ENJOY云魔方抽油烟机',
                price: 4390
            }, {
                name: '美的60升预约洗浴电热水器',
                price: 1099
            }, {
                name: '九阳电饭煲多功能智能电饭锅',
                price: 159
            }, {
                name: '美的电烤箱家用大容量',
                price: 329
            }, {
                name: '奥克斯(AUX)936破壁料理机',
                price: 1599
            }, {
                name: '飞利浦面条机 HR2356/31',
                price: 665
            }, {
                name: '松下NU-JA100W 家用蒸烤箱',
                price: 1799
            }, {
                name: '飞利浦咖啡机 HD7751/00',
                price: 1299
            }],
            [{
                name: '暴风TV 超体电视 40X 40英寸',
                price: 1299
            }, {
                name: '小米(MI)L55M5-AA 55英寸',
                price: 3699
            }, {
                name: '飞利浦HTD5580/93 音响',
                price: 2999
            }, {
                name: '金门子H108 5.1套装音响组合',
                price: 1198
            }, {
                name: '方太ENJOY云魔方抽油烟机',
                price: 4390
            }, {
                name: '美的60升预约洗浴电热水器',
                price: 1099
            }, {
                name: '九阳电饭煲多功能智能电饭锅',
                price: 159
            }, {
                name: '美的电烤箱家用大容量',
                price: 329
            }, {
                name: '奥克斯(AUX)936破壁料理机',
                price: 1599
            }, {
                name: '飞利浦面条机 HR2356/31',
                price: 665
            }, {
                name: '松下NU-JA100W 家用蒸烤箱',
                price: 1799
            }, {
                name: '飞利浦咖啡机 HD7751/00',
                price: 1299
            }]
        ]
    }, {
        num:'5',
		zi: '',
        text: '电脑数码',
        tabs: ['热门', '电脑/平板', '潮流影音'],
        items: [
            [{
                name: '戴尔成就Vostro 3800-R6308',
                price: 2999
            }, {
                name: '联想IdeaCentre C560',
                price: 5399
            }, {
                name: '惠普260-p039cn台式电脑',
                price: 3099
            }, {
                name: '华硕飞行堡垒旗舰版FX-PRO',
                price: 6599
            }, {
                name: '惠普(HP)暗影精灵II代PLUS',
                price: 12999
            }, {
                name: '联想(Lenovo)小新700电竞版',
                price: 5999
            }, {
                name: '游戏背光牧马人机械手感键盘',
                price: 499
            }, {
                name: '罗技iK1200背光键盘保护套',
                price: 799
            }, {
                name: '西部数据2.5英寸移动硬盘1TB',
                price: 419
            }, {
                name: '新睿翼3TB 2.5英寸 移动硬盘',
                price: 849
            }, {
                name: 'Rii mini i28无线迷你键盘鼠标',
                price: 349
            }, {
                name: '罗技G29 力反馈游戏方向盘',
                price: 2999
            }],
            [{
                name: '戴尔成就Vostro 3800-R6308',
                price: 2999
            }, {
                name: '联想IdeaCentre C560',
                price: 5399
            }, {
                name: '惠普260-p039cn台式电脑',
                price: 3099
            }, {
                name: '华硕飞行堡垒旗舰版FX-PRO',
                price: 6599
            }, {
                name: '惠普(HP)暗影精灵II代PLUS',
                price: 12999
            }, {
                name: '联想(Lenovo)小新700电竞版',
                price: 5999
            }, {
                name: '游戏背光牧马人机械手感键盘',
                price: 499
            }, {
                name: '罗技iK1200背光键盘保护套',
                price: 799
            }, {
                name: '西部数据2.5英寸移动硬盘1TB',
                price: 419
            }, {
                name: '新睿翼3TB 2.5英寸 移动硬盘',
                price: 849
            }, {
                name: 'Rii mini i28无线迷你键盘鼠标',
                price: 349
            }, {
                name: '罗技G29 力反馈游戏方向盘',
                price: 2999
            }],
            [{
                name: '戴尔成就Vostro 3800-R6308',
                price: 2999
            }, {
                name: '联想IdeaCentre C560',
                price: 5399
            }, {
                name: '惠普260-p039cn台式电脑',
                price: 3099
            }, {
                name: '华硕飞行堡垒旗舰版FX-PRO',
                price: 6599
            }, {
                name: '惠普(HP)暗影精灵II代PLUS',
                price: 12999
            }, {
                name: '联想(Lenovo)小新700电竞版',
                price: 5999
            }, {
                name: '游戏背光牧马人机械手感键盘',
                price: 499
            }, {
                name: '罗技iK1200背光键盘保护套',
                price: 799
            }, {
                name: '西部数据2.5英寸移动硬盘1TB',
                price: 419
            }, {
                name: '新睿翼3TB 2.5英寸 移动硬盘',
                price: 849
            }, {
                name: 'Rii mini i28无线迷你键盘鼠标',
                price: 349
            }, {
                name: '罗技G29 力反馈游戏方向盘',
                price: 2999
            }]
        ]
    }];

function lazyLoadFloor(){
	var items={};//后面添加判断防止图片加载完之后再次加载
	var loadedItemNum=0;
	var totalItemNum=$floor.length;
	var loadItem=null;//后面添加解绑事件,防止图片全部加载完成后每次都进行判断
	$doc.on("floor-show",loadItem=function(event,i,elem){
		console.log(1);//测试是否解绑事件
		if(items[i]!=='loaded'){//如果对象中有对应的索引值且值为loaded,不再执行
			$doc.trigger('floor-loadItem',[i,elem]);  
		}
	});
	$doc.on('floor-loadItem',function(event,i,elem){		
		var html=buildFloor(floorData[i]);
		var $elem=$(elem);
		
		items[i]='loaded';//添加一个键值对进入对象items,键是i,值是loaded
		loadedItemNum++;
		console.log(i+'load');//测试是否添加成功当前图片,打印索引值
		if(loadedItemNum===totalItemNum){
			$doc.trigger('floor-itemsLoaded');
		}
		
		setTimeout(function(){//模拟服务器延迟
			$elem.html(html);
			lazyLoadFloorImgs($elem);
			$elem.tab({
				event:'mouseenter',
				css3:false,
				js:true,
				animation:'fade',
				activeIndex:0,
				interval:0,
				delay:200
			});
		},1000);
	});
	$doc.on('floor-itemsLoaded',function(event){
		$doc.off('floor-show',loadItem);//清除事件
		$win.off('scroll resize',timetoShow);
		
	});
}

function lazyLoadFloorImgs($elem){
	var items={};//后面添加判断防止图片加载完之后再次加载
	var loadedItemNum=0;
	var totalItemNum=$elem.find('.floor-img').length;
	var loadItem=null;//后面添加解绑事件,防止图片全部加载完成后每次都进行判断
	$elem.on("tab-show",loadItem=function(event,i,elem){
		console.log(1);//测试是否解绑事件
		if(items[i]!=='loaded'){//如果对象中有对应的索引值且值为loaded,不再执行
			$elem.trigger('tab-loadItem',[i,elem]);  
		}
	});
	$elem.on('tab-loadItem',function(event,i,elem){
		//按需加载
		var $imgs=$(elem).find('.floor-img');
		$imgs.each(function(_,el){
			var $img=$(el);
			//$img.attr('src',$img.data('src'));//这样写如果是容量大的图片会出问题
			slider.loadImg($img.data('src'),function(url){
				$img.attr('src',url);
				items[i]='loaded';//添加一个键值对进入对象items,键是i,值是loaded
				loadedItemNum++;
				console.log(i+'load');//测试是否添加成功当前图片,打印索引值
				if(loadedItemNum===totalItemNum){
					$elem.trigger('tab-itemsLoaded');
				}
			},function(url){
				console.log('从'+url+'加载失败');
				//多加载一次
				// 显示备用图片
				$img.attr('src', 'img/floor/placeholder.png');
			});
		}); 
	});
	$elem.on('tab-itemsLoaded',function(event){
		$elem.off('tab-show',loadItem);//清除事件   
	});
}

function buildFloor(floorData){
	var html="";
	html+='<div class="container">';
	html+=buildFloorHead();
	html+=buildFloorBody();
	html+='</div>';
	return html;
}

function buildFloorHead(floorData){
	var html="";
	html+='<div class="floor-head clearfixed">';
	html+='<h2 class="floor-itile fl"><span class="iconfont floor-itile-num">'+floorData.zi+'</span><span class="floor-itile-text">'+floorData.text+'</span></h2>';
	html+='<ul class="tab-item-wrap fr">';
	for(var i=0;i<floorData.tabs.length;i++){
		html+='<li class="fl"><a href="javascript:;" class="tab-item">'+floorData.tabs[i]+'</a></li>';
		if(i!==floorData.tabs.length-1){
			html+='<li class="fl text-hidden floor-divider">分割线</li>';   
		}
	}
	html+='</ul>';
	html+='</div>';	
	return html;
}

function buildFloorBody(floorData){
	var html="";
	html+='<div class="floor-body">';
	for(var i=0;i<floorData.items.length;i++){
		html+='<ul class="tab-panel clearfixed">';
		for(var j=0;j<floorData.items.length;j++){
			html+='<li class="floor-item fl">';
			html+='<p class="floor-item-pic"><a href="###" target="_blank"><img src="img/floor/loading.gif" class="floor-img" data-src="img/floor/'+floorData.num+'/'+(i+1)+'/'+(j+1)+'.png" alt="" /></a></p>';
			html+='<p class="floor-item-name"><a href="###" target="_blank" class="link">'+floorData.items[i][j].name+'</a></p>';
			html+='<p class="floor-item-price">'+floorData.items[i][j].price+'</p>';
			html+='</li>';
		}
		html+='</ul>';
	}
	html+='</div>';
	return html;
}

function isVisible($elem){//判断什么时候出现在可视区域
	return ($win.height()+$win.scrollTop()>$elem.offset().top) && ($win.scrollTop()<$elem.offset().top+$elem.height());
}

function timetoShow(){//当出现在可视区域时触发floor-show事件
	$floor.each(function(index,elem){
		if(isVisible($(elem))){
			$doc.trigger('floor-show',[index,elem]);	   
		}
	});
}

$win.on('scroll resize',timetoShow);

lazyLoadFloor();
timetoShow();


写回答

4回答

好帮手慕糖

2020-02-18

同学你好,如下,这两函数是有设置参数的,所以调用函数的时候,也需要传递参数,例:

http://img.mukewang.com/climg/5e4bb77609c3cbf810410451.jpg

http://img.mukewang.com/climg/5e4bb79d09564e7706350162.jpg

如果我的回答帮助了你,欢迎采纳,祝学习愉快~

0

迷失的小麦

提问者

2020-02-18

效果出来了,但是每一页都是3张图片,不知道什么原因

http://img.mukewang.com/climg/5e4bccec09e5c92319201080.jpg

0

迷失的小麦

提问者

2020-02-18

http://img.mukewang.com/climg/5e4bb3ca09a1c69619201080.jpg

5个楼层没出来,需要html和css以及别的模块吗

0

好帮手慕糖

2020-02-18

同学你好,建议:同学可以详细的说明下,敲的是那一部分的代码,实现哪一部分的效果?也可以提供下报错信息,便于准确的定位与解决问题。

祝学习愉快~

0

0 学习 · 14456 问题

查看课程