请老师帮忙找错,敲到这里测试有错,找不到,应该是这段代码写错了
来源: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
效果出来了,但是每一页都是3张图片,不知道什么原因
迷失的小麦
提问者
2020-02-18
5个楼层没出来,需要html和css以及别的模块吗
好帮手慕糖
2020-02-18
同学你好,建议:同学可以详细的说明下,敲的是那一部分的代码,实现哪一部分的效果?也可以提供下报错信息,便于准确的定位与解决问题。
祝学习愉快~
相似问题
回答 4
回答 1