javascript - 带按钮的多行图像滑块
问题描述
我正在开发一个网站,该网站应该有带有可点击按钮的图像滑块,可以翻转到下一个图像。
我能够制作一个滑块/页面,但由于我还没有编码经验,所以当我尝试制作多个滑块直接相互跟随时遇到了困难。某个滑块的按钮开始混淆,并且也针对其他滑块,或者仅针对第一个滑块,但不是我想要的方式..
所以我开始复制和重复相同的代码行,并将它们分别应用于图像组。我还希望一些文本与图像一起翻转,所以我将文本和图像与按钮组合在一起,最后我得到了很多重复,而且代码太长了。:-)
现在它可以工作,但我认为有一个更简单的解决方案,可以让我的代码更短。
有人可以帮我:
当有多个滑块时,拥有一个不会混淆目标的好的 java 脚本?
只有一个“按钮”/滑块而不是将它们复制到所有“容器网格”组,但仍然将文本与图像一起翻转?
谢谢,很抱歉代码太长了。:)
<div class="content">
<!---THE FIRST SLIDER--->
<div class="slider_1">
<div class="slides_1">
<div class="containergrid">
<div class="description">
<p class="maindescription">Description</p>
<p class="year">2017</p>
</div>
<div class="imgbutton">
<img class="img_1_1">
<div class="button">
<button class="prev"
onclick="plusDivs1(-1)"></button>
<button class="next"
onclick="plusDivs1(1)"></button>
</div>
</div>
</div>
</div>
<div class="slides_1">
<div class="containergrid">
<div class="description">
<p class="maindescription">Description</p>
<p class="year">2017</p>
</div>
<div class="imgbutton">
<img class="img_1_2">
<div class="button">
<button class="prev"
onclick="plusDivs1(-1)"></button>
<button class="next"
onclick="plusDivs1(1)"></button>
</div>
</div>
</div>
</div>
</div>
<!---THE SECOND SLIDER--->
<div class="slider_2">
<div class="slides_2">
<div class="containergrid">
<div class="description">
<p class="maindescription">Description</p>
<p class="year">2017</p>
</div>
<div class="imgbutton">
<img class="img_2_1">
<div class="button">
<button class="prev"
onclick="plusDivs1(-1)"></button>
<button class="next"
onclick="plusDivs1(1)"></button>
</div>
</div>
</div>
</div>
<div class="slides_2">
<div class="containergrid">
<div class="description">
<p class="maindescription">Description</p>
<p class="year">2017</p>
</div>
<div class="imgbutton">
<img class="img_2_2">
<div class="button">
<button class="prev"
onclick="plusDivs1(-1)"></button>
<button class="next"
onclick="plusDivs1(1)"></button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var slideIndex = 1;
showDivs1(slideIndex);
function plusDivs1(n) {
showDivs1(slideIndex += n);
}
function showDivs1(n) {
var i;
var x = document.getElementsByClassName("slides_1");
if (n > x.length) { slideIndex = 1 }
if (n < 1) { slideIndex = x.length }
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
x[slideIndex - 1].style.display = "flex";
}
</script>
<script>
var slideIndex = 1;
showDivs2(slideIndex);
function plusDivs2(n) {
showDivs2(slideIndex += n);
}
function showDivs2(n) {
var i;
var x = document.getElementsByClassName("slides_2");
if (n > x.length) { slideIndex = 1 }
if (n < 1) { slideIndex = x.length }
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
x[slideIndex - 1].style.display = "flex";
}
</script>
解决方案
因此,您只需将幻灯片的引用传递给showDivs
函数,这样您就可以保持点击相互独立。您仍然需要分别初始化每个滑块。
function plusDivs(slider, n) {
showDivs(slider, slideIndex += n);
}
function showDivs(slider, index) {
var i;
var x = document.getElementsByClassName(slider);
if (index > x.length) {
slideIndex = 1
}
if (index < 1) {
slideIndex = x.length
}
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
x[slideIndex - 1].style.display = "flex";
}
// Initialize the sliders
var slideIndex = 1;
showDivs('slides_1', slideIndex);
showDivs('slides_2', slideIndex);
在您的 HTML 中,您只需将引用传递给plusDivs
函数:
onclick="plusDivs('slides_1', 1)"
这是一个显示工作示例的小提琴
推荐阅读
- discord - 是否可以制作一个不和谐的 js 网站以及如何制作?
- php - .JSON file creates NULL value via PHP
- angular - 创建模型后无法读取未定义的属性“名称”
- nestjs - 如何在导入的模块/控制器中访问创建的 NestJS ApplicationContext?
- android - 无法从谷歌地图中删除折线
- mysql - 如何从 MySQL 数据库中获取字符之间的结果匹配?
- python - 在后台运行python shell?
- agens-graph - 如何删除 AgensGraph 上的所有节点和边?
- sql-server - 如何通过连接不同服务器的两个表而不使用链接服务器来创建用于删除记录的 SSIS 包
- r - 如何使用限制(xlim 和 ylim)放大到 R(ggplot/ggmap)中的美国东北地区?