javascript - 如何从对象数组javascript制作滑块?
问题描述
const slidesShop = document.querySelectorAll('.slide-shop');
const slider = document.querySelector('.slider-shop');
const slideOne = document.getElementById('slide-1');
const slideTwo = document.getElementById('slide-2');
const slideThree = document.getElementById('slide-3');
const prev = document.getElementById('prev');
const next = document.getElementById('next');
const bikes = [{
name: 'Trek',
size: 'L',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
},
{
name: 'Trek',
size: 'XL',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
}
]
let activeSlide = 0;
let bikesCount = 10;
const changeSlide = () => {
slidesShop.forEach((page) => {
page.classList.remove('active-1');
slidesShop[activeSlide].classList.add('active-1');
});
};
prev.addEventListener('click', () => {
activeSlide--;
if (activeSlide < 0) {
activeSlide = slidesShop.length - 1;
}
changeSlide();
showBikes();
});
next.addEventListener('click', () => {
activeSlide++;
if (activeSlide > slidesShop.length - 1) {
activeSlide = 0;
}
changeSlide();
showBikes();
});
const showBikes = () => {
slideOne.innerHTML = '';
for (let i = 1; i <= bikesCount; i++) {
bikes.forEach((bikes) => {
const {
name,
size,
type,
price,
text_line
} = bikes;
const slideShopItem = document.createElement('div');
slideShopItem.classList.add('slide-shop-item');
slideShopItem.innerHTML = `
<img src="img/about.jpg" alt="" />
<div class="item-content">
<h3>${name}</h3>
<p>
${text_line}
</p>
<small>Size: <span>${size}</span></small>
<small>Type: <span>${type}</span></small>
<small>Price: <span>${price}$</span></small>
</div>
`;
slideOne.appendChild(slideShopItem);
});
}
};
<div class="slider-shop">
<div class="slide-shop active-1" id="slide-1"></div>
<div class="slide-shop" id="slide-2"></div>
<div class="slide-shop" id="slide-3"></div>
</div>
<div class="buttons-shop-container">
<button id="prev">⮜</button>
<button id="next">⮞</button>
</div>
我有一个这样的对象数组,只是对象多于两个:
const bikes = [
{
name: 'Trek',
size: 'L',
type: 'Mountain Bike',
price: 1000,
text_line:
'Bike rides bike of the same something, some, someone!Best with there opinion',
},
{
name: 'Trek',
size: 'XL',
type: 'Mountain Bike',
price: 1000,
text_line:
'Bike rides bike of the same something, some, someone!Best with there opinion',
}
]
我的问题是:是否可以制作一个滑块,在每张幻灯片中显示一个数组中的 10 个对象?那么第一次滑动 10 个对象,然后第二次滑动其他 10 个对象,然后第三次滑动接下来的 10 个对象?
这段代码的问题是它在一张幻灯片中向我展示了所有对象。我想把它们分成更多的幻灯片。有人可以帮我弄这个吗?
解决方案
而不是一个对象数组:
const bikes = [{
name: 'Trek',
size: 'L',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
},
{
name: 'Trek',
size: 'XL',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
}
]
您应该创建一个对象数组。这样,您就可以用其中的每个项目来表示每个页面。
const page = [{
bikes: [{
name: 'Trek',
size: 'L',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
},
{
name: 'Trek',
size: 'XL',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
},
],
},
{
bikes: [{
name: 'Super bike',
size: 'M',
type: 'Mountain Bike',
price: 600,
text_line: 'Lorem ipsum',
}, ],
},
{
bikes: [{
name: 'smoll bike',
size: 'S',
type: 'Mountain Bike',
price: 450,
text_line: 'Lorem ipsum bla bla',
}, ],
},
];
并显示活动数据。使用page[activeSlide].bikes
. 每次 activeSlide 改变它都会更新数据。
const slidesShop = document.querySelectorAll('.slide-shop');
const slider = document.querySelector('.slider-shop');
const slideOne = document.getElementById('slide-1');
const slideTwo = document.getElementById('slide-2');
const slideThree = document.getElementById('slide-3');
const prev = document.getElementById('prev');
const next = document.getElementById('next');
const page = [{
bikes: [{
name: 'Trek',
size: 'L',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
},
{
name: 'Trek',
size: 'XL',
type: 'Mountain Bike',
price: 1000,
text_line: 'Bike rides bike of the same something, some, someone!Best with there opinion',
},
],
},
{
bikes: [{
name: 'Super bike',
size: 'M',
type: 'Mountain Bike',
price: 600,
text_line: 'Lorem ipsum',
}, ],
},
{
bikes: [{
name: 'smoll bike',
size: 'S',
type: 'Mountain Bike',
price: 450,
text_line: 'Lorem ipsum bla bla',
}, ],
},
];
let activeSlide = 0;
let bikesCount = 10;
const changeSlide = () => {
slidesShop.forEach((page) => {
page.classList.remove('active-1');
slidesShop[activeSlide].classList.add('active-1');
});
};
prev.addEventListener('click', () => {
activeSlide--;
if (activeSlide < 0) {
activeSlide = slidesShop.length - 1;
}
changeSlide();
showBikes();
});
next.addEventListener('click', () => {
activeSlide++;
if (activeSlide > slidesShop.length - 1) {
activeSlide = 0;
}
changeSlide();
showBikes();
});
const showBikes = () => {
slideOne.innerHTML = '';
for (let i = 1; i <= bikesCount; i++) {
page[activeSlide].bikes.forEach((bikes) => {
const {
name,
size,
type,
price,
text_line
} = bikes;
const slideShopItem = document.createElement('div');
slideShopItem.classList.add('slide-shop-item');
slideShopItem.innerHTML = `
<img src="img/about.jpg" alt="" />
<div class="item-content">
<h3>${name}</h3>
<p>
${text_line}
</p>
<small>Size: <span>${size}</span></small>
<small>Type: <span>${type}</span></small>
<small>Price: <span>${price}$</span></small>
</div>
`;
slideOne.appendChild(slideShopItem);
});
}
};
<div class="slider-shop">
<div class="slide-shop active-1" id="slide-1"></div>
<div class="slide-shop" id="slide-2"></div>
<div class="slide-shop" id="slide-3"></div>
</div>
<div class="buttons-shop-container">
<button id="prev">⮜</button>
<button id="next">⮞</button>
</div>
推荐阅读
- javascript - 我没有在构造函数中绑定我的函数的“this”,但是为什么“this”没有定义呢?
- vb.net - 如何停止删除所有记录?
- mysql - 数据库未连接。它可以与什么联系起来?
- c# - 为什么在更新信息时它会重复我的数据库条目?
- python - 我如何拦截 JSON/XHR 请求,而不是使用 Xpaths 抓取数据
- json - 如何从 Angular 响应式表单中删除字段?
- pandas - 重塑 pandas 数据框 - (Pivot/Stack-unstack)
- angular - RXJS Observable 移除管道操作符
- django - 在 Django ListView 中动态设置 filterset_class
- r - 西里尔字母后传说中的意外空白