老师,有问题
# 具体遇到的问题
老师,像这种它代码不报错,我自己也盯了好久,就是找不到它到底哪儿出错了,请问应该怎么找出问题在哪儿呢?
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
<!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 {
background: linear-gradient(#ff9b9b 50%, #106dbb 50%);
width: 150px;
height: 150px;
border-radius: 50%;
}
</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(value, time) {
return this._add("translate", value, time);
}
//缩放
scale(value, time) {
return this._add("scale", value, time);
}
//形变
rotate(value, time) {
return this._add("rotate", value, time);
}
//添加动画
_add(type, value, time = this.defaultTime) {
this._queue.push({ type, value, time });
return this;
}
//添加完成,可以开始动了
done() {
this._start();
}
//开始动,从队列中把动画一个个拿出来
_start() {
if (!this._queue.length) return;
//先进先出
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({ type, value, time }) {
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(180, 5000).done();
console.log(tf);
</script>
</body>
</html>
在这里输入代码,可通过选择【代码语言】突出显示
正在回答
同学你好,如果不报错的话,那么我们要自己去猜想哪里出现问题,然后对代码的进行排查。例如打印出来看看结果是不是对的,或者直观的看代码的逻辑是不是对的等等。例如这里动画没有生效,那么我们就要先去排查动画是否添加上了,这里老师输出了一下,发现只有缩放生效了。如下:
首先猜想,其他两个动画的方法是否调用成功了,可以在方法中任意打印一下看方法是否执行:
发现也执行了(这里就不截图了),那么就要看方法中执行的代码是否有问题,这里是调用了_add方法,所以进一步去排查这个方法。我们打印一下它的返回值:
看看样式是否添加成功,然后就发现问题了。translate没有添加上值,反而多了一个transform属性。另外rotate单位书写格式也不对,应该和180放在一个括号里面。
问题发现了,找到对应的代码,修改即可:
哪里出现问题,就要找到对应的代码,然后顺藤摸瓜一点一点的排查。当然了,排查错误也不是那么简单的,初学者排查问题的速度肯定会很慢,等以后经验多了,排查错误的能力也就提升了,慢慢来哦~
祝学习愉快~
同学你好,这样看你想要排查什么问题哦。例如老师这里,第一次是想要看translate这个函数是否执行了,执行了才能继续往下排查。translate函数中,什么功能也没有设置,只是调用了另一个函数_add。
那么我们就要继续排查_add函数,排查_add的时候你也可以先任意打印一些内容,看看它有没有执行。老师直接打印this,是因为我们排查的不就是为啥样式没有添加成功。这个函数有我们想要排查的东西,直接输出this,也能知道这个函数有没有执行哦。所以老师就没有在多此一举任意输出一下内容了。
排查问题没有什么是要确定的怎么做的,每一个人排查的方式也不一样,老师也只是把自己排查问题的过程分享给你。同学也别着急,你现在是一个初学者,不会排查问题很正常,老师学习那会跟你现在一样哦。这个着急不来的,以后遇到问题,多自己尝试排查,慢慢去提升哦。
祝学习愉快~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星