Как я могу применить ту же функциональность на 3 набора кнопок на 3 наборах слайдов?Html

Программисты Html
Ответить
Anonymous
 Как я могу применить ту же функциональность на 3 набора кнопок на 3 наборах слайдов?

Сообщение Anonymous »

Этот код работает для первого набора слайдов, но не для 2 -го и 3 -го наборов (доступ к 3 точкам внизу страницы). В частности, кнопки со стрелками «вверх» и «вниз» ничего не делают. < /P>
Я думаю, что это связано с селекторами CSS в коде JS. Я пытается сделать это выбрать их всех с помощью QuerySelectorallAll < /code>, но я не мог этого сделать. -code ">

Код: Выделить всё

window.kontext = function(container) {

// Dispatched when the current layer changes
var changed = new kontext.Signal();

// All layers in this instance of kontext
var layers = Array.prototype.slice.call(container.querySelectorAll('.layer'));

// Flag if the browser is capable of handling our fancy transition
var capable = 'WebkitPerspective' in document.body.style ||
'MozPerspective' in document.body.style ||
'msPerspective' in document.body.style ||
'OPerspective' in document.body.style ||
'perspective' in document.body.style;

if (capable) {
container.classList.add('capable');
}

// Create dimmer elements to fade out preceding slides
layers.forEach(function(el, i) {
if (!el.querySelector('.dimmer')) el.innerHTML += '';
});

/**
* Transitions to and shows the target layer.
*
* @param target index of layer or layer DOM element
*/
function show(target, direction) {

// Make sure our listing of available layers is up to date
layers = Array.prototype.slice.call(container.querySelectorAll('.layer'));

// Flag to CSS that we're ready to animate transitions
container.classList.add('animate');

// Flag which direction
direction = direction || (target > getIndex() ? 'right' : 'left');

// Accept multiple types of targets
if (typeof target === 'string') target = parseInt(target);
if (typeof target !== 'number') target = getIndex(target);

// Enforce index bounds
target = Math.max(Math.min(target, layers.length), 0);

// Only navigate if were able to locate the target
if (layers[target] && !layers[target].classList.contains('show')) {

layers.forEach(function(el, i) {
el.classList.remove('left', 'right');
el.classList.add(direction);
if (el.classList.contains('show')) {
el.classList.remove('show');
el.classList.add('hide');
} else {
el.classList.remove('hide');
}
});

layers[target].classList.add('show');

changed.dispatch(layers[target], target);

}

}

/**
* Shows the previous layer.
*/
function prev() {

var index = getIndex() - 1;
show(index >= 0 ? index : layers.length + index, 'left');

}

/**
* Shows the next layer.
*/
function next() {

show((getIndex() + 1) % layers.length, 'right');

}

/**
* Retrieves the index of the current slide.
*
* @param of [optional] layer DOM element which index is
* to be returned
*/
function getIndex(of) {

var index = 0;

layers.forEach(function(layer, i) {
if ((of && of == layer) || (!of && layer.classList.contains('show'))) {
index = i;
return;
}
});

return index;

}

/**
* Retrieves the total number of layers.
*/
function getTotal() {

return layers.length;

}

// API
return {

show: show,
prev: prev,
next: next,

getIndex: getIndex,
getTotal: getTotal,

changed: changed

};

};

/**
* Minimal utility for dispatching signals (events).
*/
kontext.Signal = function() {
this.listeners = [];
}

kontext.Signal.prototype.add = function(callback) {
this.listeners.push(callback);
}

kontext.Signal.prototype.remove = function(callback) {
var i = this.listeners.indexOf(callback);

if (i >= 0) this.listeners.splice(i, 1);
}

kontext.Signal.prototype.dispatch = function() {
var args = Array.prototype.slice.call(arguments);
this.listeners.forEach(function(f, i) {
f.apply(null, args);
});
}

// Create a new instance of kontext
var k = kontext(document.querySelector('.kontext'));

// Demo page JS

var bulletsContainer = document.body.querySelector('.bullets');

// Create one bullet per layer
for (var i = 0, len = k.getTotal(); i < len;  i++) {
var bullet = document.createElement('li');
bullet.className = i === 0 ? 'active' : '';
bullet.setAttribute('index', i);
bullet.onclick = function(event) {
k.show(event.target.getAttribute('index'))
};
bullet.ontouchstart = function(event) {
k.show(event.target.getAttribute('index'))
};
bulletsContainer.appendChild(bullet);
}

// Update the bullets when the layer changes
k.changed.add(function(layer, index) {
var bullets = document.body.querySelectorAll('.bullets li');
for (var i = 0, len = bullets.length; i < len; i++) {
bullets[i].className = i === index ? 'active' : '';
}
});

document.addEventListener('keyup', function(event) {
if (event.keyCode === 37) k.prev();
if (event.keyCode === 39) k.next();
}, false);

const sliderContainer = document.querySelector('.slider-container');
const slideRight = document.querySelector('.right-slide');
const slideLeft = document.querySelector('.left-slide');
const upButton = document.querySelector('.up-button');
const downButton = document.querySelector('.down-button');
const slidesLength = slideRight.querySelectorAll('div').length;

console.log(slidesLength);
let activeSlideIndex = 0;

slideLeft.style.top = `-${(slidesLength - 1) * 100}vh`

upButton.addEventListener('click', () => changeSlide('up'))
downButton.addEventListener('click', () => changeSlide('down'))

const changeSlide = (direction) => {
const sliderHeight = sliderContainer.clientHeight;
if (direction === 'up') {
activeSlideIndex++
if (activeSlideIndex > slidesLength - 1) {
activeSlideIndex = 0;
}
} else {
activeSlideIndex--
if (activeSlideIndex <  0) {
activeSlideIndex = slidesLength - 1;
}
}
slideRight.style.transform = `translateY(-${sliderHeight * activeSlideIndex}px)`
slideLeft.style.transform = `translateY(${sliderHeight * activeSlideIndex}px)`

}< /code>
.kontext {
width: 100%;
height: 100%;
}

.kontext .layer {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
visibility: hidden;
/*box-shadow: 0px 0px 120px rgba( 0, 0, 0, 0.8 );*/
}

.kontext .layer.show {
visibility: visible;
}

.kontext.capable {
-webkit-perspective: 1000px;
-moz-perspective: 1000px;
perspective: 1000px;

-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
}

.kontext.capable .layer {
-webkit-transform: translateZ(-100px);
-moz-transform: translateZ(-100px);
transform: translateZ(-100px);
}

.kontext.capable .layer.show {
-webkit-transform: translateZ(0px);
-moz-transform: translateZ(0px);
transform: translateZ(0px);
}

.kontext.capable.animate .layer.show.right {
-webkit-animation: show-right 1s forwards ease;
-moz-animation: show-right 1s forwards ease;
animation: show-right 1s forwards ease;
}

.kontext.capable.animate .layer.hide.right {
-webkit-animation: hide-right 1s forwards ease;
-moz-animation: hide-right 1s forwards ease;
animation: hide-right 1s forwards ease;
}

.kontext.capable.animate .layer.show.left {
-webkit-animation: show-left 1s forwards ease;
-moz-animation: show-left 1s forwards ease;
animation: show-left 1s forwards ease;
}

.kontext.capable.animate .layer.hide.left {
-webkit-animation: hide-left 1s forwards ease;
-moz-animation: hide-left 1s forwards ease;
animation: hide-left 1s forwards ease;
}

/* CSS animation keyframes */

@-webkit-keyframes show-right {
0% {
-webkit-transform: translateZ(-200px);
}

40% {
-webkit-transform: translate(40%, 0) scale(0.8) rotateY(-20deg);
}

100% {
-webkit-transform: translateZ(0px);
}
}

@-webkit-keyframes hide-right {
0% {
-webkit-transform: translateZ(0px);
visibility: visible;
}

40% {
-webkit-transform: translate(-40%, 0) scale(0.8) rotateY(20deg);
}

100% {
-webkit-transform: translateZ(-200px);
visibility: hidden;
}
}

@-moz-keyframes show-right {
0% {
-moz-transform: translateZ(-200px);
}

40% {
-moz-transform: translate(40%, 0) scale(0.8) rotateY(-20deg);
}

100% {
-moz-transform: translateZ(0px);
}
}

@-moz-keyframes hide-right {
0% {
-moz-transform: translateZ(0px);
visibility: visible;
}

40% {
-moz-transform: translate(-40%, 0) scale(0.8) rotateY(20deg);
}

100% {
-moz-transform: translateZ(-200px);
visibility: hidden;
}
}

@keyframes show-right {
0% {
transform: translateZ(-200px);
}

40% {
transform: translate(40%, 0) scale(0.8) rotateY(-20deg);
}

100% {
transform: translateZ(0px);
}
}

@keyframes hide-right {
0% {
transform: translateZ(0px);
visibility: visible;
}

40% {
transform: translate(-40%, 0) scale(0.8) rotateY(20deg);
}

100% {
transform: translateZ(-200px);
visibility: hidden;
}
}

@-webkit-keyframes show-left {
0% {
-webkit-transform: translateZ(-200px);
}

40% {
-webkit-transform: translate(-40%, 0) scale(0.8) rotateY(20deg);
}

100% {
-webkit-transform: translateZ(0px);
}
}

@-webkit-keyframes hide-left {
0% {
-webkit-transform: translateZ(0px);
visibility: visible;
}

40% {
-webkit-transform: translate(40%, 0) scale(0.8) rotateY(-20deg);
}

100% {
-webkit-transform: translateZ(-200px);
visibility: hidden;
}
}

@-moz-keyframes show-left {
0% {
-moz-transform: translateZ(-200px);
}

40% {
-moz-transform: translate(-40%, 0) scale(0.8) rotateY(20deg);
}

100% {
-moz-transform:  translateZ(0px);
}
}

@-moz-keyframes hide-left {
0% {
-moz-transform: translateZ(0px);
visibility: visible;
}

40% {
-moz-transform: translate(40%, 0) scale(0.8) rotateY(-20deg);
}

100% {
-moz-transform: translateZ(-200px);
visibility: hidden;
}
}

@keyframes show-left {
0% {
transform: translateZ(-200px);
}

40% {
transform: translate(-40%, 0) scale(0.8) rotateY(20deg);
}

100% {
transform: translateZ(0px);
}
}

@keyframes hide-left {
0% {
transform: translateZ(0px);
visibility: visible;
}

40% {
transform: translate(40%, 0) scale(0.8) rotateY(-20deg);
}

100% {
transform: translateZ(-200px);
visibility: hidden;
}
}

/* Dimmer */

.kontext .layer .dimmer {
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
visibility: hidden;
background: transparent;
}

.kontext.capable.animate .layer .dimmer {
-webkit-transition: background 1s ease;
-moz-transition: background 1s ease;
transition: background 1s ease;
}

.kontext.capable.animate .layer.hide .dimmer {
visibility: visible;
background: rgba(0, 0, 0, 0.7);
}

/* Styles for the demo */

html,
body {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
background-color: #222;
background-repeat: repeat;
color: #fff;
}

.layer {
text-align: center;
text-shadow: 1px 1px 0px rgba(0, 0, 0, 0.1);
}

.layer h2 {
position: relative;
top: 20%;
margin: 0;
font-size: 6.25em;
}

.layer.one {
background: #dc6c5f;
}

.layer.two {
background: #95dc84;
}

.layer.three {
background: #64b9d2;
}

.bullets {
position: absolute;
width: 100%;
bottom: 20px;
padding: 0;
margin: 0;
text-align: center;
}

.bullets li {
display: inline-block;
width: 20px;
height: 20px;
border-radius: 50%;
margin: 0 3px;

background: rgba(255, 255, 255, 0.5);
box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.2);
cursor: pointer;

-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

.bullets li:hover {
background: rgba(255, 255, 255, 0.8);
}

.bullets li.active {
cursor: default;
background: #fff;
}

@media screen and (max-width: 400px) {
body {
font-size: 12px;
}

.layer h2 {
font-size: 5em;
}

.bullets li {
margin: 0 6px;
}
}

/* PART TWO */

.slider-container {
position: relative;
overflow: hidden;
width: 100vw;
height: 100vh;
}

.left-slide {
height: 100%;
width: 35%;
position: absolute;
top: 0;
left: 0;
transition: transform 0.5s ease-in-out;
}

.left-slide>div {
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: white;
}

.left-slide h1 {
font-size: 40px;
margin-bottom: 10px;
margin-top: -30px;
}

.right-slide {
height: 100%;
position: absolute;
top: 0;
left: 35%;
width: 65%;
transition: transform 0.5s ease-in-out;
}

.right-slide>div {
background-repeat: no-repeat;
height: 100%;
width: 100%;
background-size: cover;
background-position: center center;
}

button {
background-color: white;
border: none;
color: #aaa;
cursor: pointer;
padding: 15px;
}

button:hover {
color: #222;
}

button:focus {
outline: none;
}

.slider-container .action-buttons button {
position: absolute;
left: 35%;
top: 50%;
z-index: 100;
}

.slider-container .action-buttons .down-button {
transform: translateX(-100%);
border-radius: 5px 0 0 5px;
}

.slider-container .action-buttons .up-button {
transform: translateY(-100%);
border-radius:  0 5px 5px 0;
}< /code>





Kontext
















left 1

left 2

left 3

left 4



right 1

right 2

right 3
right 4


[i][/i]
[i][/i]








left 1

left 2

left 3

left 4



right 1
right 2
right 3
right 4


[i][/i]
[i][/i]








left 1

left 2

left 3

left 4



right 1
right 2
right 3
right 4


[i][/i]
[i][/i]





[list][/list]







Я ищу ангела для пересмотра файла JS.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -of-slides
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»