一直在报错,我不知道哪里有问题,老师可以帮忙看看吗?

一直在报错,我不知道哪里有问题,老师可以帮忙看看吗?

// 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);



正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,测试同学提供的代码,没有报错,同学是报什么错呢?可以先下载老师的源码进行对比,看下是否是其他文件里面的代码书写的有问题,如果排查不出来的话,可以把报错信息和全部的代码(html,css,js)都粘贴上来,老师帮助测试。

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

  • 慕前端2064318 提问者 #1
    已经可以了,谢谢老师
    2019-11-26 22:23:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师