老师这种错误怎么排查 ,我自己找不出来

老师这种错误怎么排查 ,我自己找不出来

相关截图:

https://img1.sycdn.imooc.com//climg/612f349e0922177e12000762.jpghttps://img1.sycdn.imooc.com//climg/612f34a8090e36b521600249.jpg

https://img1.sycdn.imooc.com//climg/612f34cd09da0e0821471172.jpg

相关代码:module / base.js

// 引入常量
import { ELEMENT_NODE_TYPE,SLIDER_ANIMATION_CLASS_NAME} from './constants';
// 引入默认参数
import DEFAULTS from './defaults';

// 需要实现的基类
class BaseSlider {
constructor(el, options) {
// el.nodeType不等于1的时候,但数字不方便,写为常量
if (el.nodeType !== ELEMENT_NODE_TYPE) {
throw new Error('实例化的时候,请传DOM元素!')
}
// 合并默认参数和用户参数,以用户参数为准
// 得到实际参数
this.options = {
...DEFAULTS,
...options
};

const sliderEl = el;
const sliderContentEl = sliderEl.querySelector('.slider-content');
const sliderItemEls = sliderContentEl.querySelectorAll('.slider-item');

// 添加到this上,为了方法中使用
this.sliderEl = sliderEl;
this.sliderContentEl = sliderContentEl;
this.sliderItemEls = sliderItemEls;

// 当前索引与最大最小索引
this.minIndex = 0;
this.maxIndex = sliderItemEls.length - 1;
this.currIndex = this.getCorrectedIndex(this.options.initialIndex);

// 索引之后,获取每个slider-item的宽度(每次移动的距离)
this.itemWidth = sliderItemEls[0].offsetWidth;
this.init();
}

// 初始化
init() {
// 为每个slider-item设置宽度
this.setItemsWidth();
// 为slider-content设置宽度
this.setContentWidth();
// 切换到初始索引initialIndex
this.move(this.getDistance());
// 开启动画
if (this.options.animation){
this.openAnimation();
}
// 自动切换
if (this.options.autoplay){
this.autoplay();
}
}

// 为每个slider-item设置宽度
setItemsWidth() {
for (const item of this.sliderItemEls) {
item.style.width = `${this.itemWidth}px`;
}
}
// 为slider-content设置宽度
setContentWidth() {
this.sliderContentEl.style.width = `${this.itemWidth*this.sliderItemEls.length}px`;
}
// move 不带动画的移动
move(distance) {
this.sliderContentEl.style.transform = `translate3d(${distance}px,0px,0px)`;
}
// 带动画的移动
moveWidthAnimation(distance){
this.setAnimationSpeed();
this.move(distance);
this.sliderContentEl.addEventListener(
'transitionend',()=>{
this.closeAnimation();
},false);
}
// 获取要移动的距离
getDistance(index = this.currIndex){
return -this.itemWidth*index;
}
// 开启动画
openAnimation(){
this.sliderContentEl.classList.add(SLIDER_ANIMATION_CLASS_NAME);
}
// 关闭动画
closeAnimation(){
this.setAnimationSpeed(0);
}
// 设置动画的切换速度
setAnimationSpeed(speed = this.options.speed){
this.sliderContentEl.style.transitionDuration = `${speed}ms`;
}
// 自动切换
autoplay(){
const {autoplay} = this.options;
if (autoplay <=0)return;
// 每次开始自动切换之前,先将之前存在的切换停掉
this.pause();
this.autoplayTimer = setInterval(()=>{
this.next();
},autoplay)
}

// to方法
to(index){
index=this.getCorrectedIndex(index);
if(this.currIndex === index)return;
this.currIndex = index;
const distance = this.getDistance();
if(this.options.animation){
this.moveWidthAnimation(distance);
} else {
this.move(distance);
}
}
// 切换上一张
prev(){
this.to(this.currIndex-1);
}
// 切换下一张 next方法
next(){
this.to(this.currIndex+1);
}

// 暂停自动切换
pause(){
clearInterval(this.autoplayTimer);
}


// 获取修正后的索引值
// 切换到0的时候,继续往左,则切换到最大的索引
getCorrectedIndex(index) {
if (index < this.minIndex) return this.maxIndex;
if (index > this.maxIndex) return this.minIndex;
// 条件都满足,返回index
return index;
}
}

export default BaseSlider;

相关代码:loading / loading.art

<div class="loading {{inline?'loading-inline':''}}">
<div class="loading-indocator">
<img src="./loading.gif" alt="loading">
</div>
<div class="loading-text">{{text?text:'加载中……'}}</div>
</div>

相关代码:loading / loading.css

.loading {
width: 100%;
font-size: 14px;
text-align: center;
/* 不要在loading组件这里设置高度,因为loading是公共组件 */
}

.loading-inline .loading-indocator,.loading-inline .loading-text {
display: inline-block;
}
.loading-inline .loading-text {
margin-left: 6px;
}

相关代码:index.js

import './slider.css';
import './btn.css';

// 开发完成之后,在这里将module中的index.js引入,省略写

import Slider from './module';

// loading... 加载中的组件
// 获取slider.art模板
import render from './slider.art';
import {getData,getDelaydeData} from 'api/getData';

// 导入接口配置
import {URL} from './config';

// slider-layout里面的东西替换成我们获取到的模板
const layoutEl = document.getElementById('slider-layout');

getDelaydeData(URL).then(data => {
// console.log(data);
// [{url: "http://alimc.img.imooc.com/class/muyun/mall-PC/slide/banner_01.jpg"}]

// layoutEl.innerHTML = render({
// items: data
// });

// 成功获取到数据之后,才进行以下的操作
const slider = new Slider(document.querySelector('.slider'), {
// 使用默认值来测试一下
initialIndex: 0,
animation: true,
speed: 300,
autoplay: 1000
});

// 默认自动切换,鼠标移入banner的时候停止自动切换
const bannerEl = document.getElementById('banner');

const leftbtnEl = document.getElementById('left_btn');
const rightbtnEl = document.getElementById('right_btn');

leftbtnEl.addEventListener('click', () => {
slider.prev();
}, false);
rightbtnEl.addEventListener('click', () => {
slider.next();
}, false);

bannerEl.addEventListener('mouseenter', () => {
slider.pause();
}, false);
bannerEl.addEventListener('mouseleave', () => {
slider.autoplay();
}, false);
});


相关代码:还需要传哪些代码吗



正在回答

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

2回答

同学你好,是的,art文件中注释也会被解析,自己注意下即可。

好帮手慕星星 2021-09-01 16:39:53

同学你好,从报错中可以看到:

https://img1.sycdn.imooc.com//climg/612f389109470fd603890154.jpg

https://img1.sycdn.imooc.com//climg/612f3bbd09f0a2ae00000000.jpg

1、建议检查art文件中是不是注释有问题

2、index.js中将数据填充代码解开

https://img1.sycdn.imooc.com//climg/612f3bf6093b2d1307960378.jpg

这样开始显示加载组件,然后显示数据。

自己调整试试,如果还是不可以的话,建议将index.art以及slider.art文件代码粘贴上来,老师帮助测试。

祝学习愉快!

  • 提问者 我不是胖球球 #1

    谢谢老师 ,已经ok了。删掉了注释掉的代码之后就好了,是注释在加载的时候也会被解析到吗?

    https://img1.sycdn.imooc.com//climg/612f3dfe09b50df715930491.jpg


    2021-09-01 17:29:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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