base.js
import {ELEMENT_NODE_TYPE} from './constants';
import DEFAULTS from './default';
class BaseSlider {
constructor(el) {
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.initiallindex,
);
//每个slider-item 的宽度(每次移动的距离)
this.itemWidth = sliderItemEls[0].offsetWidth;
this.init();
}
//初始化
init(){
// 为每个slider-item设置宽度
this.setItemsWidth();
// 为slider-content设置宽度
this.setContentWidth();
}
// 为每个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`;
}
//获取修正后的索引值
getCorrectedIndeex(index){
if(index<this.minIndex) return this.maxIndex;
if(index>this.minIndex) return this.minIndex;
return index;
}
}
export default BaseSlider;
constants.js
//keyboard
export const LEDT_KEYCODE = 37;
export const RIGHT_KEYCODE = 39;
//base
export const ELEMENT_NODE_TYPE = 1;
default.js
//默认参数
const DEFAULTS = {
//初始索引
initiallindex:0,
//切换时是否有动画
Animation:true,
//切换速度,单位ms
speed:300,
//自动切换,单位ms
autoplay:0
};
export default DEFAULTS;
index.js
import BaseSlider from './base.js';
import keyboard from './keyboard.js';
// 继承基类
class Slider extends BaseSlider {
constructor(el) {
super(el);
this.bindEvent();
}
bindEvent() {
keyboard.bindEvent(this);
}
}
export default Slider;
keyboard.js
// 添加键盘控制
import { LEFT_KEYCODE, RIGHT_KEYCODE } from './constants.js';
const keyboard = {
bindEvent(slider) {
document.addEventListener(
'keyup',
ev => {
if (ev.keyCode === LEFT_KEYCODE) {
slider.prev();
} else if (ev.keyCode === RIGHT_KEYCODE) {
slider.next();
}
},
false
);
}
};
export default keyboard;
slider/index.js
import './slider.css'
import Slider from './module';
new Slider(document.querySelector('slider'));
slider.art
<div class="slider">
<ul class="slider-content">
<li class="slider-item">
<a href="#">
<img src="images/banner1.jpg" alt="" class="slider-img">
</a>
</li>
<li class="slider-item">
<a href="#">
<img src="images/banner2.jpg" alt="" class="slider-img">
</a>
</li>
<li class="slider-item">
<a href="#">
<img src="images/banner3.jpg" alt="" class="slider-img">
</a>
</li>
<li class="slider-item">
<a href="#">
<img src="images/banner4.jpg" alt="" class="slider-img">
</a>
</li>
<li class="slider-item">
<a href="#">
<img src="images/banner5.jpg" alt="" class="slider-img">
</a>
</li>
</ul>
</div>
slider.css
.slider,
.slider-content,
.slider-item,
.slider-img {
width: 100%;
height: 100%;
}
.slider {
overflow: hidden;
}
.slider-item {
float: left;
}
.slider-img {
/* display: block; */
vertical-align: top;
}
.slider-animation {
transition-property: transform;
transition-duration: 0ms;
}
el. nodetype 获取不到
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星