一直在报错,我不知道哪里有问题,老师可以帮忙看看吗?
// 1. 对图片进行分类
// 2. 生成dom元素
// 3. 绑定事件
// 4. 显示到页面上
(function(window, document) {
//公共方法
const methods = {
appendChild: function(parent, ...children) {
children.forEach(el => {
parent.appendChild(el);
});
},
$: function(selector, root = document) {
return root.querySelector(selector);
},
$$: function(selector, root = document) {
return root.querySelectorAll(selector);
}
};
let Img = function(options) {
this._init(options);
this._createElement();
this._bind();
this._show();
};
//初始化
/**
* data:图片数据
* initType:图片类型
* parasitifer:挂在到的元素
*/
Img.prototype._init = function({ data, initType, parasitifer }) {
this.types = ['全部']; //所有分类
this.all = []; //所有图片元素
this.classified = { 全部: [] }; //按照类型分类后的图片
this.curType = initType; //当前显示的图片分类
this.parasitifer = methods.$(parasitifer); //挂载点
this._classify(data); //图片进行分类
};
/**
* 图片分类
* data:图片的数据
*/
Img.prototype._classify = function(data) {
let srcs = [];
data.forEach(({ title, type, alt, src }) => {
if (!this.types.includes(type)) {
//判断所有类型是否已经有type,没有就push进去
this.types.push(type);
}
if (!Object.keys(this.classified).includes(type)) {
//判断类型分类后有type,没有就push进去
this.classified[type] = [];
}
if (!srcs.includes(src)) {
//图片有没有生成过,
//生成图片
//没有就push到匪类中
srcs.push(src);
let figure = document.createElement('figure');
let img = document.createElement('img');
let figcaption = document.createElement('figcaption');
img.src = src;
img.setAttribute('alt', alt);
figcaption.innerText = title;
methods.appendChild(figure, img, figcaption);
this.all.push(figure);
this.classified[type].push(this.all.length - 1);
} else {
//去all中找到对应的图片
//添加到对应的分类中
this.classified[type].push(srcs.findIndex(s1 => s1 === src));
}
});
};
//根据分类获取图片
Img.prototype._getImgsByType = function(type) {
console.log(this.classified);
console.log(this.classified[type].map(index => this.all[index]));
return type === '全部' ? [...this.all] : this.classified[type].map(index => this.all[index]);
};
//生成DOM
Img.prototype._createElement = function() {
//创建按钮
let typeBtn = [];
for (let type of this.types.values()) {
typeBtn.push(`<li class="__Img__classify__type-btn${type === this.curType ? ' __Img__type-btn-active' : ''}">${type}</li>`);
}
let tamplate = `
<ul class="__Img__classify">${typeBtn.join('')}</ul>
<div class="__Img__img-container"></div>
`;
let wrap = document.createElement('div');
wrap.className = '__Img__img-container';
wrap.innerHTML = tamplate;
this.imgContainer = methods.$('.__Img__img-container', wrap);
methods.appendChild(this.imgContainer, ...this._getImgsByType(this.curType));
};
//绑定事件
Img.prototype._bind = function() {};
//显示元素
Img.prototype._show = function() {};
window.$Img = Img;
})(window, document);
正在回答
同学你好,测试同学提供的代码,没有报错,同学是报什么错呢?可以先下载老师的源码进行对比,看下是否是其他文件里面的代码书写的有问题,如果排查不出来的话,可以把报错信息和全部的代码(html,css,js)都粘贴上来,老师帮助测试。
如果我的回答帮到了你,欢迎采纳,祝学习愉快~
- 参与学习 人
- 提交作业 209 份
- 解答问题 3299 个
本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星