Owl carousel загружается через раз - почему?
Всем добрый день!
Есть owl карусель для которой предусмотрено выравнивание элементов по высоте. Подскажите, пожалуйста, почему порой, если заходить через инкогнито в браузере, сама карусель с контентом порой не загружается и как это можно исправить? Если обновить страничку, то загрузится и вообще раз на раз не приходится.
function setEqualHeight(columns) {
var tallestcolumn = 0;
columns.each(function() {
currentHeight = $(this).height();
if (currentHeight > tallestcolumn) {
tallestcolumn = currentHeight;
}
});
columns.height(tallestcolumn);
}
(function($) {
"use strict"; // Start of use strict
$('#photo-gallery').owlCarousel({
loop: true,
nav: false,
dots: false,
responsive: {
0: {
items: 2
},
480: {
items: 3
},
768: {
items: 4
},
992: {
items: 5
}
}
});
window.onload = setEqualHeight($("#photo-gallery .owl-item"));
})(jQuery); // End of use strict
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.carousel.css" rel="stylesheet" />
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.theme.default.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/owl.carousel.js"></script>
<div class="yellow"></div>
<section id="photo-gallery" class="carousel owl-carousel">
<div>
<a class="photo"><img src="http://placehold.it/300x190&text=1" alt="photo-1"></a>
</div>
<div>
<a class="photo"><img src="http://placehold.it/304x189&text=2" alt="photo-2"></a>
</div>
<div>
<a class="photo"><img src="http://placehold.it/305x189&text=3" alt="photo-3"></a>
</div>
<div>
<a class="photo"><img src="http://placehold.it/304x189&text=4" alt="photo-4"></a>
</div>
<div>
<a class="photo"><img src="http://placehold.it/305x190&text=5" alt="photo-5"></a>
</div>
</section>
<div class="green"></div>
|
giwuf,
сначала загрузка фото, потом выравнивание, затем установка owlCarousel. |
Цитата:
|
Рони, я вас правильно понимаю, что вы имеете ввиду так?
function setEqualHeight(columns){
var tallestcolumn = 0;
columns.each(function(){
currentHeight = $(this).height();
if(currentHeight > tallestcolumn){
tallestcolumn = currentHeight;
}
});
columns.height(tallestcolumn);
}
(function($) {
"use strict"; // Start of use strict
$('#photo-gallery .photo__img').each(function(){
setEqualHeight($(this).parents(".owl-item"));
});
$('#photo-gallery').owlCarousel({
loop:true,
nav:false,
dots:false,
responsive: {
0: {
items: 1
},
480: {
items: 2
},
768: {
items: 3
},
992: {
items: 4
},
1200: {
items: 5
}
}
});
})(jQuery); // End of use strict
"зачем? почему у вас блоки разной высоты?" Предусмотреть, чтобы размеры картинок могли отличаться в пару пикселей по ширине или высоте при динамической подгрузке и при этом все отображалось ровненько без зазоров и кривостей |
giwuf,
а так ?
.photo img{
height: 190px;
width: auto;
}
|
OwlCarousel 2 выравнивание по высоте
giwuf,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<style type="text/css">
.yellow,
.green {
width: 100%;
height: 50px;
}
.yellow {
background-color: yellow;
margin-bottom: -20px;
}
.green {
margin-top: -20px;
background-color: green;
}
.carousel .owl-stage-outer {
padding: 20px 0;
}
.owl-item{
transition: .5s all;
}
.owl-item:hover {
transform: scale(1.2);
z-index: 10;
}
.photo img {
width: auto;
}
@media (min-width: 0px){
.photo img{
height: 100px;
}}
@media (min-width: 480px){
.photo img{
height: 120px;
}}
@media (min-width: 768px){
.photo img{
height: 150px;
}}
@media (min-width: 992px){
.photo img{
height: 170px;
}}
@media (min-width: 1200px){
.photo img{
height: 190px;
}}
</style>
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.carousel.css" rel="stylesheet" />
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.theme.default.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/owl.carousel.js"></script>
<script>
jQuery(window).on("load", function() {
$("#photo-gallery").owlCarousel({
loop: true,
nav: false,
dots: false,
responsive: {
0: {
items: 2
},
480: {
items: 3
},
768: {
items: 4
},
992: {
items: 5
}
}
})
});
</script>
</head>
<body>
<div class="yellow"></div>
<section id="photo-gallery" class="carousel owl-carousel">
<div>
<a class="photo"><img src="https://picsum.photos/300/190/?random&r=1" alt="photo-1"></a>
</div>
<div>
<a class="photo"><img src="https://picsum.photos/304/184/?random&r=2" alt="photo-2"></a>
</div>
<div>
<a class="photo"><img src="https://picsum.photos/305/189/?random&r=3" alt="photo-3"></a>
</div>
<div>
<a class="photo"><img src="https://picsum.photos/304/189/?random&r=4" alt="photo-4"></a>
</div>
<div>
<a class="photo"><img src="https://picsum.photos/305/190/?random&r=5" alt="photo-5"></a>
</div>
</section>
<div class="green"></div>
</body>
</html>
|
Цитата:
1 - интересно, что на итоговом сайте мне понадобилось дописать плюс ко всему правила Код:
#photo-gallery.owl-carousel .owl-item {2 - маленькие белые зазорчики по бокам картинки слева и справа возникают из-за правила Код:
transform: translateZ(0);От них нельзя избавиться никак? вот картинки одного размера таких контуров не образовывают |
Цитата:
giwuf, посмотрите пример выше снова, убрал лишнее в css, может так лучше будет. |
Одна деталь, которую, возможно не заметили... Если указать строго фиксированную высоту картинки, то искажаются пропорции картинки. (Овальные колёса машины)
Вместо такой кучи правил @media, можно было указать приблизительно height: 20vw;, но и это не нужно, поскольку (Овальные колёса машины) Объявление transform: translateZ(0); бессмысленно в данном контексте, объект сдвинутый на 0 пикселей остаётся на своём месте ( и ещё поскольку по умолчанию transform-style: flat;)
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width">
<style type="text/css">
.carousel:after, .carousel:before {
content: "";
display: block;
height: 50px;
background: #f1fff1;
}
.carousel:after {
background: #fffff1;
}
.carousel .owl-stage-outer {
padding: 30px 0;
margin: -30px 0;
}
.carousel .owl-stage {
display: flex;
background: black;
}
.carousel .owl-item {
transition: .15s;
z-index: 0;
flex: 1 0 auto;
}
.carousel .owl-item:hover {
transition: .5s;
transform: scale(1.25);
z-index: 10;
}
.carousel .photo {
display: block;
overflow: hidden;
height: 100%;
}
.carousel .photo img {
min-width: 100%;
min-height: 100%;
object-fit: cover;
}
</style>
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.carousel.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.theme.default.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/owl.carousel.js"></script>
<script>
jQuery(window).on("load", function() {
$("#photo-gallery").owlCarousel({
loop: true,
nav: false,
dots: false,
responsive: {
0: { items: 2 },
480: { items: 3 },
768: { items: 4 },
992: { items: 5 }
}
})
});
</script>
</head>
<body>
<section id="photo-gallery" class="carousel owl-carousel">
<a class="photo"><img src="https://picsum.photos/300/190/?random&r=1" alt="photo-1"></a>
<a class="photo"><img src="https://picsum.photos/304/184/?random&r=2" alt="photo-2"></a>
<a class="photo"><img src="https://picsum.photos/305/189/?random&r=3" alt="photo-3"></a>
<a class="photo"><img src="https://picsum.photos/304/189/?random&r=4" alt="photo-4"></a>
<a class="photo"><img src="https://picsum.photos/305/190/?random&r=5" alt="photo-5"></a>
</section>
</body>
</html>
|
Malleys,
спасибо за помощь!!! |
Malleys,
подскажи можно ли сделать бесконечный зум, при наведении на фото, пример того что хочется ниже, но края картинки "дрожжат", это главная беда и цикл без повтора. строка 51.
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width">
<style type="text/css">
.carousel:after, .carousel:before {
content: "";
display: block;
height: 50px;
background: #f1fff1;
}
.carousel:after {
background: #fffff1;
}
.carousel .owl-stage-outer {
padding: 30px 0;
margin: -30px 0;
}
.carousel .owl-stage {
display: flex;
background: black;
}
.carousel .owl-item {
transition: .15s;
z-index: 0;
flex: 1 0 auto;
}
.carousel .owl-item:hover {
transition: .5s;
transform: scale(1.25);
z-index: 10;
}
.carousel .photo {
display: block;
overflow: hidden;
height: 100%;
}
.carousel .photo img {
min-width: 100%;
min-height: 100%;
object-fit: cover;
}
.carousel .owl-item:hover img{
transition: 5s;
transform: scale(1.25);
}
</style>
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.carousel.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.theme.default.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/owl.carousel.js"></script>
<script>
jQuery(window).on("load", function() {
$("#photo-gallery").owlCarousel({
loop: true,
nav: false,
dots: false,
responsive: {
0: { items: 2 },
480: { items: 3 },
768: { items: 4 },
992: { items: 5 }
}
})
});
</script>
</head>
<body>
<section id="photo-gallery" class="carousel owl-carousel">
<a class="photo"><img src="https://picsum.photos/300/190/?random&r=1" alt="photo-1"></a>
<a class="photo"><img src="https://picsum.photos/304/184/?random&r=2" alt="photo-2"></a>
<a class="photo"><img src="https://picsum.photos/305/189/?random&r=3" alt="photo-3"></a>
<a class="photo"><img src="https://picsum.photos/304/189/?random&r=4" alt="photo-4"></a>
<a class="photo"><img src="https://picsum.photos/305/190/?random&r=5" alt="photo-5"></a>
</section>
</body>
</html>
|
OwlCarousel zoom
Malleys,
примерный вариант бесконечного зума, хотелось бы как-то плавнее сделать переходы и в хроме особенно видно, как края картинок 'плывут'.
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width">
<style type="text/css">
.carousel:after, .carousel:before {
content: "";
display: block;
height: 50px;
background: #f1fff1;
}
.carousel:after {
background: #fffff1;
}
.carousel .owl-stage-outer {
padding: 30px 0;
margin: -30px 0;
}
.carousel .owl-stage {
display: flex;
background: black;
}
.carousel .owl-item {
transition: .15s;
z-index: 0;
flex: 1 0 auto;
}
.carousel .owl-item:hover {
transition: .5s;
transform: scale(1.25);
z-index: 10;
}
.carousel .photo {
display: block;
overflow: hidden;
height: 100%;
}
.carousel .photo img {
min-width: 100%;
min-height: 100%;
object-fit: cover;
}
.carousel .owl-item:hover .photo img{
animation: zoom 7s infinite cubic-bezier(0.55, 0.055, 0.675, 0.19);
}
@keyframes zoom{
0%{
transform: scale(1);
}
95%{
transform: scale(2);
}
100%{
transform: scale(10);
}
}
</style>
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.carousel.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.theme.default.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/owl.carousel.js"></script>
<script>
jQuery(window).on("load", function() {
$("#photo-gallery").owlCarousel({
loop: true,
nav: false,
dots: false,
responsive: {
0: { items: 2 },
480: { items: 3 },
768: { items: 4 },
992: { items: 5 }
}
})
});
</script>
</head>
<body>
<section id="photo-gallery" class="carousel owl-carousel">
<a class="photo"><img src="https://picsum.photos/300/190/?random&r=1" alt="photo-1"></a>
<a class="photo"><img src="https://picsum.photos/304/184/?random&r=2" alt="photo-2"></a>
<a class="photo"><img src="https://picsum.photos/305/189/?random&r=3" alt="photo-3"></a>
<a class="photo"><img src="https://picsum.photos/304/189/?random&r=4" alt="photo-4"></a>
<a class="photo"><img src="https://picsum.photos/305/190/?random&r=5" alt="photo-5"></a>
</section>
</body>
</html>
|
рони,
Дрожание из за scale. сам часто сталкиваюсь. если поменять 1.2 например или другое значение пропадает, но при масштабировании или на ретине может появится опять. в общем универсальный способ избавится был бы кстати. |
Это баг в движке браузера. Оно не должно дрожать или «плыть».
Если добавить /* костыль */ overflow: hidden; border-radius: .01px; то в данном случае дрожание скрывается codepen.io/anon/pen/OoPLrX |
Malleys,
костыль работает, спасибо, небольшой косяк при масштабировании нижней границы картинки. |
Malleys,
спасибо огромное!!! :thanks: |
Цитата:
object-fit: cover;, которое убирает микроотступы, как я понимаю - оно вель не кроссбраузерное для ie и старщих edge - как-нить это можно решить? |
giwuf,
Цитата:
Цитата:
object-fit да и вопросы по css, лучше адресовать Malleys, он более продвинутый специалист по этой теме. |
Цитата:
Нашел нечто подобное на polyfill, но что-то бекграудная картинка даже не перекрывает внутренний img, а если через консоль принудительно картинку удалить, то точно такой же артифакт срабатывает и на бэкграунде. Может быть дело в Код:
transform: scale(1.25); |
Цитата:
проверял в ie11, нет никаких проблем с scale(1.25) Цитата:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> |
giwuf,
код ниже, у вас в ie работает?
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width">
<meta charset="utf-8">
<style type="text/css">
.carousel:after, .carousel:before {
content: "";
display: block;
height: 50px;
background: #f1fff1;
}
.carousel:after {
background: #fffff1;
}
.carousel .owl-stage-outer {
padding: 32px 0;
margin: -32px 0;
}
.carousel .owl-stage {
display: flex;
}
.carousel .owl-item {
-webkit-transition: .15s;
transition: .15s;
z-index: 0;
flex: 1 0 auto;
overflow: hidden;
border-radius: .01px;
}
.carousel .owl-item:hover {
-webkit-transition: .5s;
transition: .5s;
-webkit-transform: scale(1.23);
transform: scale(1.23);
z-index: 10;
border-radius: 10px;
box-shadow: 4px 4px 7px -1px rgba(173, 173, 173, 1.0);
}
.carousel .photo {
display: block;
overflow: hidden;
height: 100%;
}
.carousel .photo img {
min-width: 100%;
min-height: 100%;
object-fit: cover;
-webkit-transition: 1s;
transition: 1s;
-webkit-transform: scale(1.15);
transform: scale(1.15);
animation: zoom 10s infinite linear;
animation-play-state: paused;
}
.carousel .photo img:hover {
animation-play-state: running;
}
@keyframes zoom {
from, to, 90% {
-webkit-filter: blur(0.1px);
filter: blur(0.1px);
}
90% {
-webkit-transform: scale(2);
transform: scale(2);
}
91% {
-webkit-transform: scale(1);
transform: scale(1);
-webkit-filter: blur(5px);
filter: blur(5px);
}
}
</style>
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.carousel.css" rel="stylesheet">
<link href="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/assets/owl.theme.default.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/smashingboxes/OwlCarousel2/2.0.0-beta.3/dist/owl.carousel.js"></script>
<script>
jQuery(window).on("load", function() {
$("#photo-gallery").owlCarousel({
loop: true,
nav: false,
dots: false,
responsive: {
0: { items: 2 },
480: { items: 3 },
768: { items: 4 },
992: { items: 5 }
}
})
});
</script>
</head>
<body>
<section id="photo-gallery" class="carousel owl-carousel">
<a class="photo"><img src="https://picsum.photos/300/190/?random&r=1" alt="photo-1"></a>
<a class="photo"><img src="https://picsum.photos/304/184/?random&r=2" alt="photo-2"></a>
<a class="photo"><img src="https://picsum.photos/305/189/?random&r=3" alt="photo-3"></a>
<a class="photo"><img src="https://picsum.photos/304/189/?random&r=4" alt="photo-4"></a>
<a class="photo"><img src="https://picsum.photos/305/190/?random&r=5" alt="photo-5"></a>
</section>
</body>
</html>
|
Цитата:
Стили у меня точно такие же. Другое дело, что наведении на картинку, черный фон из этой инструкции: Код:
.carousel .owl-stage {Цитата:
|
Цитата:
Цитата:
если здесь никакой фон не выскакивает, смотрите, что не так у вас. всё что мог, смотрите выше. и тут Цитата:
|
Цитата:
Все дело в том, что в ie10-11 и ранних edge не работают transition на флексах. Вот пример Цитата:
|
Цитата:
|
Цитата:
посмотрите, пожалуйста, этот пример в каком-нить ie https://jsbin.com/muqiwe/2/edit?html,css,output и сравните с поведением в другом браузере. При наведении на блоки (красный, синий) они плавно друг друга перекрывают с помощью transition, в ie же свойство transition не отрабатывает и переход получается резким. Аналогично и у меня: transition не отрабатывает и до тех пор пока не произойдет (это не мгновенно происходит) Код:
transform: scale(1.25); |
Цитата:
|
рони,
Все же я докопался до решения! Оказывается, дело было в разных версия подключенной библиотеки стилей owl carousel (у вас beta, а у меня 2.4) в которой для item были подключены такие стили:
.owl-carousel .owl-item, .owl-carousel .owl-wrapper {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
}
Прописал отдельным пунктом
.owl-carousel .owl-item, .owl-carousel .owl-wrapper {
-ms-backface-visibility: inherit;
}
и задний фон ушел! Сейчас практически идеально увеличивает картинку для ie10-11, слегка только подергивается в самом конце, но это не существенно - ориентир в первую очередь на основные браузеры.Спасибо за помощь! |
| Часовой пояс GMT +3, время: 13:57. |