老师,有问题

老师,有问题

# 具体遇到的问题
老师,像这种它代码不报错,我自己也盯了好久,就是找不到它到底哪儿出错了,请问应该怎么找出问题在哪儿呢?
# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>封装形变类</title>

    <style>

      .ball {

        backgroundlinear-gradient(#ff9b9b 50%#106dbb 50%);

        width150px;

        height150px;

        border-radius50%;

      }

    </style>

  </head>

  <body>

    <div class="ball"></div>

    <script>

      //形变类

      class Transform {

        constructor(selector) {

          this.el = document.querySelector(selector);

          this._queue = [];

          this._transform = {

            rotate: "",

            translate: "",

            scale: "",

          };

          this.defaultTime = Transform.config.defaultTime;

          this.el.style.transition = `all ${0.3}s`;

        }


        //位移

        translate(valuetime) {

          return this._add("translate"valuetime);

        }


        //缩放

        scale(valuetime) {

          return this._add("scale"valuetime);

        }


        //形变

        rotate(valuetime) {

          return this._add("rotate"valuetime);

        }


        //添加动画

        _add(typevaluetime = this.defaultTime) {

          this._queue.push({ typevaluetime });

          return this;

        }


        //添加完成,可以开始动了

        done() {

          this._start();

        }


        //开始动,从队列中把动画一个个拿出来

        _start() {

          if (!this._queue.lengthreturn;

          //先进先出

          setTimeout(() => {

            const info = this._queue.shift();

            this.el.style.transition = `all ${info.time / 1000}s`;

            this.el.style.transform = this._getTransform(info);


            setTimeout(() => {

              this._start();

            }, info.time);

          }, 0);

        }


        _getTransform({ typevaluetime }) {

          const _tsf = this._transform;

          switch (type) {

            case "translate":

              _tsf.transform = `translate(${value})`;

              break;

            case "scale":

              _tsf.scale = `scale(${value})`;

              break;

            case "rotate":

              _tsf.rotate = `rotate(${value})deg`;

              break;

          }

          return `${_tsf.translate} ${_tsf.scale} ${_tsf.rotate}`;

        }

      }


      Transform.config = {

        defaultTime: 300,

      };


      const tf = new Transform(".ball");

      tf.translate("200px, 200px").scale(1.5).rotate(1805000).done();


      console.log(tf);

    </script>

  </body>

</html>

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

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

2回答

同学你好,如果不报错的话,那么我们要自己去猜想哪里出现问题,然后对代码的进行排查。例如打印出来看看结果是不是对的,或者直观的看代码的逻辑是不是对的等等。例如这里动画没有生效,那么我们就要先去排查动画是否添加上了,这里老师输出了一下,发现只有缩放生效了。如下:

http://img1.sycdn.imooc.com//climg/5f9100e1098680e909410148.jpg

首先猜想,其他两个动画的方法是否调用成功了,可以在方法中任意打印一下看方法是否执行:

http://img1.sycdn.imooc.com//climg/5f91012409b25d0305730181.jpg

发现也执行了(这里就不截图了),那么就要看方法中执行的代码是否有问题,这里是调用了_add方法,所以进一步去排查这个方法。我们打印一下它的返回值:

http://img1.sycdn.imooc.com//climg/5f91018e09b27b6b05550155.jpg

看看样式是否添加成功,然后就发现问题了。translate没有添加上值,反而多了一个transform属性。另外rotate单位书写格式也不对,应该和180放在一个括号里面。

http://img1.sycdn.imooc.com//climg/5f9101bb09d337b905980193.jpg

问题发现了,找到对应的代码,修改即可:

http://img1.sycdn.imooc.com//climg/5f91023409b83d7906450474.jpg

哪里出现问题,就要找到对应的代码,然后顺藤摸瓜一点一点的排查。当然了,排查错误也不是那么简单的,初学者排查问题的速度肯定会很慢,等以后经验多了,排查错误的能力也就提升了,慢慢来哦~

祝学习愉快~

  • 生南国 提问者 #1
    谢谢老师的耐心解答,我自己也尝试着去试了一遍,学到了一点点,但是让我现阶段去排查错误我可能会直接忽略。第一步在 translate 方法中打印1,发现方法执行成功了。那我第二步跟着老师的思路回去 _add 方法中随便打印一个2,也会发现执行成功了。。。。 于是我便直接与错误代码擦肩而过了。。。 我该怎么去确定什么时候能够随意打印,什么时候要去打印方法里面的函数呢,到时候方法里面的东西多了,我感觉出错误了,就直接凉了
    2020-10-22 12:15:40
好帮手慕夭夭 2020-10-22 17:52:57

同学你好,这样看你想要排查什么问题哦。例如老师这里,第一次是想要看translate这个函数是否执行了,执行了才能继续往下排查。translate函数中,什么功能也没有设置,只是调用了另一个函数_add。


http://img1.sycdn.imooc.com//climg/5f91527009c9960004550147.jpg

那么我们就要继续排查_add函数,排查_add的时候你也可以先任意打印一些内容,看看它有没有执行。老师直接打印this,是因为我们排查的不就是为啥样式没有添加成功。这个函数有我们想要排查的东西,直接输出this,也能知道这个函数有没有执行哦。所以老师就没有在多此一举任意输出一下内容了。

http://img1.sycdn.imooc.com//climg/5f9152f70931232904630141.jpg

排查问题没有什么是要确定的怎么做的,每一个人排查的方式也不一样,老师也只是把自己排查问题的过程分享给你。同学也别着急,你现在是一个初学者,不会排查问题很正常,老师学习那会跟你现在一样哦。这个着急不来的,以后遇到问题,多自己尝试排查,慢慢去提升哦。

祝学习愉快~

  • 提问者 生南国 #1
    好的,谢谢老师
    2020-10-22 18:04:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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