【发布时间】:2015-11-11 20:13:21
【问题描述】:
我正在尝试使用原生 JavaScript 和 CSS 创建一个垂直轮播。我知道 jQuery 有一个轮播库,但我想尝试不使用外部库从头开始构建它。我一开始只是尝试移动顶部图像,然后我计划继续移动下一个图像。我卡在第一张图片上。这是我需要你帮助的地方,StackOverflowers。
我的 HTML:
<div class="slider vertical" >
<img class="first opened" src="http://malsup.github.io/images/beach1.jpg">
<img class="opened" src="http://malsup.github.io/images/beach2.jpg">
<img src="http://malsup.github.io/images/beach3.jpg">
<img src="http://malsup.github.io/images/beach4.jpg">
<img src="http://malsup.github.io/images/beach5.jpg">
<img src="http://malsup.github.io/images/beach9.jpg">
</div>
<div class="center">
<button id="prev">∧ Prev</button>
<button id="next">∨ Next</button>
</div>
JavaScript:
var next = document.getElementById('next');
var target = document.querySelector('.first');
next.addEventListener('click', nextImg, false);
function nextImg(){
if (target.classList.contains('opened')) {
target.classList.remove('opened');
target.classList.add('closed');
} else {
target.classList.remove('closed');
target.classList.add('opened');
}
}
CSS:
div.vertical {
width: 100px;
}
.slider {
position: relative;
overflow: hidden;
height: 250px;
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
-ms-box-sizing:border-box;
box-sizing:border-box;
-webkit-transition:-webkit-transform 1.3s ease;
-moz-transition: -moz-transform 1.3s ease;
-ms-transition: -ms-transform 1.3s ease;
transition: transform 1.3s ease;
}
.slider img {
width: 100px;
height: auto;
padding: 2px;
}
.first.closed{
/* partially offscreen */
-webkit-transform: translate(0, -80%);
-moz-transform: translate(0, -80%);
-ms-transform: translate(0, -80%);
transform: translate(0, -80%);
}
.first.opened{
/* visible */
-webkit-transform: translate(0, 0%);
-moz-transform: translate(0, 0%);
-ms-transform: translate(0, 0%);
transform: translate(0, 0%);
}
我的想法是:
- 使用类来移动和显示内容
- 使用 JavaScript 添加和删除类
我想我可能没有正确地分解问题。
这就是我想要的样子:http://jsfiddle.net/natnaydenova/7uXPx/
这是我糟糕的尝试:http://jsfiddle.net/6cb58pkr/
【问题讨论】:
-
顺便说一句,在您的 JS Fiddle 中:不要将
getElementById('<id>')的语法与querySelector('#<id>')的语法混淆;否则您会收到消息(在控制台中):Uncaught TypeError: Cannot read property 'addEventListener' of null。我已经更正了 那个 错误并更新了演示:jsfiddle.net/davidThomas/6cb58pkr/1 -
谢谢@David Thomas 就是这样!这样做的时候一定是在睡觉。
-
这种实现所需的大部分(如果不是全部)主要 css 方面,我认为您已经包括在内。 (特别是固定高度和宽度,隐藏溢出)。不过我要说的一件事是,也许您的 javascript 方法还应该负责查看/滚动列表中的位置——这有助于您支持任意数量、任意尺寸的图像。我最近也在使用 css3
flex。可以帮助布局吗?抱歉,它有点模糊的建议。祝你好运。 :) -
感谢@ne1410s 的建议,我会在这个问题上睡一觉,并研究一个比第一张图像移动更多的更好的解决方案。
标签: javascript html css animation carousel