老师这种错误怎么排查 ,我自己找不出来
相关截图:



相关代码: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);
});
相关代码:还需要传哪些代码吗
13
收起
正在回答
2回答
同学你好,是的,art文件中注释也会被解析,自己注意下即可。




恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星