Отслеживание второго активного слайда
Имеется слайдер owl carousel 1.3 с 6 слайдами. Отображаются по 3. Активные слайды имеют класс active. Каким образом можно отследить второй активный слайд и применять css только к нему (требуется прописать display:block для кнопки внутри слайда)? Через nth-child работает почти как надо, но он слайды считает только при загрузке страницы, при перелистывании слайдов css не обновляет.
![]()
<script type="text/javascript">
$(document).ready(function() {
$(".owl-zk").owlCarousel({
items:3,
addClassActive:true,
navigation: true,
navigationText: ['<img src="/left.png" alt="" />', '<img src="/right.png" alt="" />'],
pagination: false
});
});</script>
|
Может селектор неправильно присваиваете? попробуйте вместо "nth-child" "nth-of-type"
|
Цитата:
$(selector).owlCarousel({
options
}).on('translated.owl.carousel', function(e) {
e.item.index - индекс текущего слайдера
})
|
j0hnik,
Не работает:) laimas, Читал документацию, сейчас пытаюсь присвоить стиль к активному элементу:) |
sergey24,
активный, это, по идее, индекс слайдера с нулевой позицией относительно окна слайдера, но от общего числа слайдов. А если из группы трех взять второй, это выделить средний, надо полагать? Поэтому не текущий активный нужен, а текущий + 1. |
laimas,
Всё очень плохо:write: |
sergey24,
скачайте новую версию owlCarousel тогда можно будет сделать с помощью api которое показал laimas, только немного уточнить его код. выборка нужна не по индексу слайдера а по фильтрации активных блоков https://owlcarousel2.github.io/OwlCarousel2/ |
Цитата:
|
Цитата:
|
Цитата:
|
Может кодом кто-нибудь помочь?:(
|
laimas,
количество блоков всегда разное(клоны слева и справа про запас) , api говорит показываю блок 1 , а по порядку блок в этот момент или 3 или 7 |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Что-то тут не сходится, надобности никогда в этом не было, но как нибудь спецом проверю индекс текущего и его класс. |
laimas,
не понимаю, что вы написали |
рони,
Обновился до 2 версии. Сейчас буду копать код, который предоставил laimas. |
laimas,
вероятно event.page.index нужен а не event.item.index |
owlCarousel css для центрального блока
sergey24,
вариант без индекса центральный блок красный, css строка 42
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.default.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.green.css" />
<style type="text/css">
.owl-carousel .item {
height: 10rem;
background-color: #4DC7A0;
padding: 1rem;
position:relative;
}
.owl-carousel .owl-prev{
position:absolute;
top:0; left:0;
display:block;
height:99%;
width:90px;
background-color: #FF00FF;
}
.owl-carousel .owl-next{
position:absolute;
top:0; right:0;
display:block;
height:99%;
width:90px;
background-color: #FF00FF;
}
.prev:after, .next:after{
content: attr(class);
}
.prev,.next{
display: inline-block;
}
.red .item{
background-color: #FF0000;
}
</style>
<title>Owl Carousel 2.1.0 Responsive by Geyan</title>
<script>
$(function() {
$(".owl-carousel").owlCarousel({ loop: true,
startPosition: -1,
items: 3,
nav: true,
navText: ['<img src="/left.png" alt="" />', '<img src="/right.png" alt="" />'],
dots: false
}).on("translated.owl.carousel", setCls);
function setCls() {
$(".owl-item").removeClass("red").filter(".active").eq(1).addClass("red")
}
setCls()
});
</script>
</head>
<body>
<div class="owl-carousel">
<div class="item">
<h4>1</h4>
</div>
<div class="item">
<h4>2</h4>
</div>
<div class="item">
<h4>3</h4>
</div>
<div class="item">
<h4>4</h4>
</div>
<div class="item">
<h4>5</h4>
</div>
<div class="item">
<h4>6</h4>
</div>
<div class="item">
<h4>7</h4>
</div>
<div class="item">
<h4>8</h4>
</div>
<div class="item">
<h4>9</h4>
</div>
<div class="item">
<h4>10</h4>
</div>
<div class="item">
<h4>11</h4>
</div>
<div class="item">
<h4>12</h4>
</div>
</div>
</body>
</html>
|
Цитата:
Цитата:
Три элемента в отображении: Если верить первому утверждению, то индекс в данном случае бесполезен, как он будет бесполезен и для второго утверждения. Если верить второму утверждению, то нет проблем, при этом не важно сколько слайдеров в отображении. То есть то, что первое в блоке, это текущий индекс. Кроме этого есть информация и о страницах, включая и о текущей, не думаю что этого мало и надо шарить фильтром по классу среди всех элементов. |
Owl Carousel центральный блок и event.item.index
laimas,
ок! не очень понимаю ваши обьяснения, но был неправ, event.item.index использовать можно.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/owl.carousel.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.carousel.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.default.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.2.1/assets/owl.theme.green.css" />
<style type="text/css">
.owl-carousel .item {
height: 10rem;
background-color: #4DC7A0;
padding: 1rem;
position:relative;
}
.owl-carousel .owl-prev{
position:absolute;
top:0; left:0;
display:block;
height:99%;
width:90px;
background-color: #FF00FF;
}
.owl-carousel .owl-next{
position:absolute;
top:0; right:0;
display:block;
height:99%;
width:90px;
background-color: #FF00FF;
}
.prev:after, .next:after{
content: attr(class);
}
.prev,.next{
display: inline-block;
}
.red .item{
background-color: #FF0000;
}
</style>
<title>Owl Carousel 2.1.0 Responsive by Geyan</title>
<script>
$(function() {
$(".owl-carousel").owlCarousel({
items: 3,
nav: true,
navText: ['<img src="/left.png" alt="" />', '<img src="/right.png" alt="" />'],
dots: false
}).on("translated.owl.carousel", setCls);
function setCls(event) {
var num = event && event.item ? event.item.index + 1 : 1 ;
$(".owl-item").removeClass("red").eq(num).addClass("red")
}
setCls()
});
</script>
</head>
<body>
<div class="owl-carousel">
<div class="item">
<h4>1</h4>
</div>
<div class="item">
<h4>2</h4>
</div>
<div class="item">
<h4>3</h4>
</div>
<div class="item">
<h4>4</h4>
</div>
<div class="item">
<h4>5</h4>
</div>
<div class="item">
<h4>6</h4>
</div>
<div class="item">
<h4>7</h4>
</div>
<div class="item">
<h4>8</h4>
</div>
<div class="item">
<h4>9</h4>
</div>
<div class="item">
<h4>10</h4>
</div>
<div class="item">
<h4>11</h4>
</div>
<div class="item">
<h4>12</h4>
</div>
</div>
</body>
</html>
|
Цитата:
Следующий шаг - все это фигня, на повестке дня стоит слайдер, в котором, при изменении, активный слайд рассыпается на частицы спадающие вниз или рассыпается на частицы сторона противоположная движению с постепенным размытием, аки хвост за кометой. Пока идею не запатентовал можно предлагать решения, если конечно комп от такого слайдера не скиснет. :) |
Цитата:
|
Цитата:
|
рони,
кстати, надо обрабатывать событие начала трансляции, убирая класс у активного слайда, иначе "моргает", не кажется? |
слайдер падающие блоки
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#slider{
position: relative;
width: 500px;
height: 300px;
background-color: #000000;
margin: 0;
padding: 0;
overflow: hidden;
}
#slider div{
margin: 0;
padding: 0;
position: absolute;
background-color: #0000FF;
background-repeat: no-repeat;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js">
</script>
<script>
$(function() {
var slider = $("#slider");
var height = slider.height();
var width = slider.width();
function load_img(next, src, x, y) {
var w = width / x | 0;
var h = height / y | 0;
slider.height(height = h * y);
slider.width(width = w * x);
slider.css({
backgroundSize: width + "px " + height + "px",
backgroundImage: "url(" + next + ")"
});
var n = 0,
arr = Array(x * y);
$.each(arr, function(i, el) {
!n && y--;
arr[i] = $("<div>", {
css: {
left: n * w,
top: y * h,
width: w,
height: h,
backgroundImage: "url(" + src + ")",
backgroundPosition: -n * w + "px " + -y * h + "px",
backgroundSize: width + "px " +
height + "px"
}
}).prependTo(slider);
n = ++n % x
});
return arr
}
function show(arr) {
$.when.apply(null, arr.map(function(el) {
var time = Math.floor(Math.random() * 1000+800);
return el.css({
"z-index": 100
}).delay(time).animate({
top: height
}, {
easing: "easeOutCirc",
duration: 1200})
})
).done(function() {
arr.forEach( function(el) {
el.remove()
});
setTimeout(go, 1000);
});
}
var arrSrc = ["http://wallpapershome.ru/images/pages/pic_h/7086.jpg", "http://wallpapershome.ru/images/pages/pic_h/8983.jpg", "http://www.kinomania.ru/images/wallpapers_film/w1920x1080_15585.jpg"];
function preload(arr,foo)
{ var count = 0;
function l() {
if(++count == arr.length) foo();
}
return arr.map(function(src) {
var img = new Image();
img.onload = l;
img.src = src;
return img
})
}
function go() {
var arr = load_img(arrSrc[1].src, arrSrc[0].src, 25, 15);
show(arr);
arrSrc.push(arrSrc.shift());
}
arrSrc = preload(arrSrc,go);
});
</script>
</head>
<body>
<div id="slider"></div>
</body>
</html>
|
Цитата:
|
рони,
все таки есть надежда прикупить самолет. :D Это не частицы, физика частиц, это иное. Хотя, например, в 3D моделировании частицей может быть и объект. Я имел ввиду элементарные частицы, вплоть до пикселя. Неужто не наблюдали как комета рассыпается? :) А это просто эффект, но тормоза уже наблюдаются. ;) |
|
Цитата:
var arr = load_img(arrSrc[1].src, arrSrc[0].src, 25, 15); останови комп :lol: |
Нет рони, это не то. Сперва откалываются большие куски, потом они распадаются на более мелкие, и так до самых малых частиц. Скорости их будут различны, физика поведения тоже, и чем далее от объекта, тем более "размазан" хвост.
Не потянет такого слайдера даже мой восьмиядерный комп в режиме реального времени. :) А смена цвета у активного слайда все равно будет заметна, так как он движется с тем же цветом, что будет назначен в конце движения другому. Надо при начале движения удалять цвет у активного. |
рони,
laimas, Спасибо большое Вам за помощь, всё работает! |
рони,
Маленькая проблемка. При загрузке сайта, если включен "loop", то класс присваивается клонированному слайду, можно ли как-то подправить? ![]() |
Цитата:
|
рони,
Цитата:
|
sergey24,
пост 21 работает , запустите код там снова, добавил loop |
sergey24,
startPosition - уточните сами если нужно |
рони,
Если отрицательный startPosition писать, то слайдер клонов не трогает, а переходит в конец списка. В 21 посте при загрузке отлично всё срабатывает и ставит куда надо стиль, но если листаем влево, то и стиль присваивается левому (из 3) слайду. Если листаем вправо, то правому:) Сейчас соединить пытаюсь:) |
| Часовой пояс GMT +3, время: 08:04. |