老师,我控输入方向键后,控制台没反应,之前一个问题你理解错我的意思了

老师,我控输入方向键后,控制台没反应,之前一个问题你理解错我的意思了

相关代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Class 的应用</title>
    <link rel="stylesheet" href="./slider.css" />
  </head>
  <body>
    <div class="slider-layout">
      <div class="slider">
        <div class="slider-content">
          <div class="slider-item">
            <a href="javascript:;"
              ><img src="./imgs/1.jpg" alt="1" class="slider-img"
            /></a>
          </div>
          <div class="slider-item">
            <a href="javascript:;"
              ><img src="./imgs/2.jpg" alt="1" class="slider-img"
            /></a>
          </div>
          <div class="slider-item">
            <a href="javascript:;"
              ><img src="./imgs/3.jpg" alt="1" class="slider-img"
            /></a>
          </div>
          <div class="slider-item">
            <a href="javascript:;"
              ><img src="./imgs/4.jpg" alt="1" class="slider-img"
            /></a>
          </div>
        </div>
      </div>
    </div>

    <script src="./base.js"></script>
    <script>
      //console.log(BaseSlider);
      class Slider extends BaseSlider{
        constructor(el,options){
          super(el,options);
          this._bindEvent();
        }

        _bindEvent(){
          document.addEventListener('keyup',ev=>{
            console.log(ev.keyCode);
          });
        }
      }
      new Slider(document.querySelector('.slider'));
    </script>
  </body>
</html>

相关代码:

// 默认参数
const DEFAULTS = {
// 初始索引
initialIndex: 0,
// 切换时是否有动画
animation: true,
// 切换速度,单位 ms
speed: 300
};
// base
const ELEMENT_NODE = 1;
const SLIDER_ANIMATION_CLASSNAME = 'slider-animation';

class BaseSlider {
constructor(el, options) {
console.log(options)
if (el.nodeType !== ELEMENT_NODE)
throw new Error('实例化的时候,请传入 DOM 元素!');

// 实际参数
this.options = {
...DEFAULTS,
...options
};

const slider = el;
const sliderContent = slider.querySelector('.slider-content');
const sliderItems = sliderContent.querySelectorAll('.slider-item');

// 添加到 this 上,为了在方法中使用
this.slider = slider;
this.sliderContent = sliderContent;
this.sliderItems = sliderItems;

this.minIndex = 0;
this.maxIndex = sliderItems.length - 1;
this.currIndex = this.getCorrectedIndex(this.options.initialIndex);

// 每个 slider-item 的宽度(每次移动的距离)
this.itemWidth = sliderItems[0].offsetWidth;

this.init();
}

// 获取修正后的索引值
// 随心所欲,不逾矩
getCorrectedIndex(index) {
if (index < this.minIndex) return this.maxIndex;
if (index > this.maxIndex) return this.minIndex;
return index;
}

// 初始化
init() {
// 为每个 slider-item 设置宽度
this.setItemsWidth();

// 为 slider-content 设置宽度
this.setContentWidth();

// 切换到初始索引 initialIndex
this.move(this.getDistance());

// 开启动画
if (this.options.animation) {
this.openAnimation();
}
}

// 为每个 slider-item 设置宽度
setItemsWidth() {
for (const item of this.sliderItems) {
item.style.width = `${this.itemWidth}px`;
}
}

// 为 slider-content 设置宽度
setContentWidth() {
this.sliderContent.style.width = `${
this.itemWidth * this.sliderItems.length
}px`;
}

// 不带动画的移动
move(distance) {
this.sliderContent.style.transform = `translate3d(${distance}px, 0px, 0px)`;
}

// 带动画的移动
moveWithAnimation(distance) {
this.setAnimationSpeed(this.options.speed);
this.move(distance);
}

// 设置切换动画速度
setAnimationSpeed(speed) {
this.sliderContent.style.transitionDuration = `${speed}ms`;
}

// 获取要移动的距离
getDistance(index = this.currIndex) {
return -this.itemWidth * index;
}

// 开启动画
openAnimation() {
this.sliderContent.classList.add(SLIDER_ANIMATION_CLASSNAME);
}

// 关闭动画
closeAnimation() {
this.setAnimationSpeed(0);
}

// 切换到 index 索引对应的幻灯片
to(index) {
index = this.getCorrectedIndex(index);
if (this.currIndex === index) return;

this.currIndex = index;
const distance = this.getDistance();

if (this.options.animation) {
return this.moveWithAnimation(distance);
} else {
return this.move(distance);
}
}

// 切换上一张
prev() {
this.to(this.currIndex - 1);
}

// 切换下一张
next() {
this.to(this.currIndex + 1);
}

// 获取当前索引
getCurrIndex() {
return this.currIndex;
}
}

http://img1.sycdn.imooc.com//climg/60f532ae09ebcf9f08930129.jpg

正在回答

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

1回答

同学你好,监听的keyup事件,会在键盘按下抬起时被触发,直接打开页面,是不会触发该事件,所以一开始控制台不会输出对应的keyCode属性值。

老师测试同学的粘贴的代码,按下键盘抬起后,控制台会输出相应的keyCode值,如下:

http://img1.sycdn.imooc.com//climg/60f535fd0943865010470749.jpg

同学可以清除浏览器缓存后,重新打开页面再测试下。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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