初始页面加载时光滑滑块宽度为 0
Slick Slider Width 0 On Initial Page Load
我 运行 遇到了 Slick Slider 的一个非常奇怪的问题。
有时,在第一页加载时,幻灯片和轨道宽度被设置为 0。
我已经尝试了很多解决方案,包括:
- 设置超时,然后调用 slick
- 正在通过 JS 触发 window 调整大小事件
- 将所有 slick 元素的最小高度设置为 1
- 将图像放入 div 容器
我这辈子都想不出如何解决这个问题。任何帮助将不胜感激!
Live example (any product page)
jQuery
// Slick Slider on Product Page
$('.slick-carousel').slick({
slidesToShow: 1,
slidesToScroll: 1,
lazyLoad: 'ondemand',
arrows: false,
fade: true,
asNavFor: '.slick-thumbnails'
});
$('.slick-thumbnails').slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: '.slick-carousel',
focusOnSelect: true,
arrows: false,
mobileFirst: true,
responsive: [{
breakpoint: 768,
settings: {
vertical: true
}
}]
});
HTML (Bootstrap 4)
<div class="col-12 col-md-10 col-lg-8 mx-auto order-1 order-md-2 slick-carousel">
<div>
<img class="img-fluid" src="{{ image.src | img_url: '1024x1024' }}" alt="{{ image.alt | escape }}" onload="$(window).trigger('resize')"/>
</div>
</div>
CSS
.slick-thumbnail-container {
* {
min-height:0;
}
flex-direction: row;
padding: 2rem 0;
.icon {
font-size: 1.25rem;
color: $gray-light;
}
}
.slick-thumbnails {
* {
min-height:0;
}
.slick-slide {
margin: 0 12px;
}
.slick-list {
margin: 0 -12px;
}
}
@include media-breakpoint-up(md) {
.product-description-container {
padding: 2rem;
border-radius: $border-radius;
margin: 3rem auto 4rem;
.add-to-cart {
width: auto;
}
}
.slick-thumbnail-container {
* {
min-height:0;
}
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.slick-thumbnails {
* {
min-height:0;
}
.slick-slide {
margin: 12px 0;
}
.slick-list {
margin: -12px 0;
}
}
.slick-carousel {
* {
min-height:0;
}
display: flex;
align-items: center;
padding: 1rem 0 4rem;
justify-content: center;
width: 100%;
max-height: 100%;
}
}
您是否尝试过运行 slick
这些命令之一
$('.slider-class').slick('setPosition').slick();
或
$('.slider-class').slick('destroy').slick();
或
$('.slider-class').slick('unslick').slick();
或
$('.slider-class').slick('unslick').slick('reinit').slick();
或
$('.slider-class').on('init', function(event, slick){
console.log("initialised")
$('.slider-class').slick()
});
或者检查 slick-initialized
class 是否在滑块上,然后调用 $('.slider-class').slick()
希望您能找到解决方案。 :)
在 slick 初始化
期间使用 $(window).on('load', function() { }
而不是 $(document).ready(function(){}
就我而言,我解决了它运行.....
$('.my-slideshow').slick("refresh");
当您在某些显示和隐藏内容上动态更新幻灯片时,这可能会有所帮助,也许 window 调整大小时....
确保容器具有指定的宽度。
在我的例子中,将 width: 100%
放在包含滑块的 div 上解决了问题。
检查你的css。
如果您在 .slider-class
上设置 display: flex;
,它将妨碍您。
我 运行 遇到了 Slick Slider 的一个非常奇怪的问题。
有时,在第一页加载时,幻灯片和轨道宽度被设置为 0。
我已经尝试了很多解决方案,包括:
- 设置超时,然后调用 slick
- 正在通过 JS 触发 window 调整大小事件
- 将所有 slick 元素的最小高度设置为 1
- 将图像放入 div 容器
我这辈子都想不出如何解决这个问题。任何帮助将不胜感激!
Live example (any product page)
jQuery
// Slick Slider on Product Page
$('.slick-carousel').slick({
slidesToShow: 1,
slidesToScroll: 1,
lazyLoad: 'ondemand',
arrows: false,
fade: true,
asNavFor: '.slick-thumbnails'
});
$('.slick-thumbnails').slick({
slidesToShow: 4,
slidesToScroll: 1,
asNavFor: '.slick-carousel',
focusOnSelect: true,
arrows: false,
mobileFirst: true,
responsive: [{
breakpoint: 768,
settings: {
vertical: true
}
}]
});
HTML (Bootstrap 4)
<div class="col-12 col-md-10 col-lg-8 mx-auto order-1 order-md-2 slick-carousel">
<div>
<img class="img-fluid" src="{{ image.src | img_url: '1024x1024' }}" alt="{{ image.alt | escape }}" onload="$(window).trigger('resize')"/>
</div>
</div>
CSS
.slick-thumbnail-container {
* {
min-height:0;
}
flex-direction: row;
padding: 2rem 0;
.icon {
font-size: 1.25rem;
color: $gray-light;
}
}
.slick-thumbnails {
* {
min-height:0;
}
.slick-slide {
margin: 0 12px;
}
.slick-list {
margin: 0 -12px;
}
}
@include media-breakpoint-up(md) {
.product-description-container {
padding: 2rem;
border-radius: $border-radius;
margin: 3rem auto 4rem;
.add-to-cart {
width: auto;
}
}
.slick-thumbnail-container {
* {
min-height:0;
}
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.slick-thumbnails {
* {
min-height:0;
}
.slick-slide {
margin: 12px 0;
}
.slick-list {
margin: -12px 0;
}
}
.slick-carousel {
* {
min-height:0;
}
display: flex;
align-items: center;
padding: 1rem 0 4rem;
justify-content: center;
width: 100%;
max-height: 100%;
}
}
您是否尝试过运行 slick
这些命令之一$('.slider-class').slick('setPosition').slick();
或
$('.slider-class').slick('destroy').slick();
或
$('.slider-class').slick('unslick').slick();
或
$('.slider-class').slick('unslick').slick('reinit').slick();
或
$('.slider-class').on('init', function(event, slick){
console.log("initialised")
$('.slider-class').slick()
});
或者检查 slick-initialized
class 是否在滑块上,然后调用 $('.slider-class').slick()
希望您能找到解决方案。 :)
在 slick 初始化
期间使用$(window).on('load', function() { }
而不是 $(document).ready(function(){}
就我而言,我解决了它运行.....
$('.my-slideshow').slick("refresh");
当您在某些显示和隐藏内容上动态更新幻灯片时,这可能会有所帮助,也许 window 调整大小时....
确保容器具有指定的宽度。
在我的例子中,将 width: 100%
放在包含滑块的 div 上解决了问题。
检查你的css。
如果您在 .slider-class
上设置 display: flex;
,它将妨碍您。