誰かがこれを手伝ってくれるのだろうか。私はCMSでカルーセルを使用していますが、必要に応じて、お客様がスライドを1つだけ持つことができるようにしたいと考えています。ただし、スライドが1つしかない場合でもフェード遷移が発生するため、基本的にはそれ自体に遷移します。スライドが1つしかない場合に、カルーセルの移行を停止する方法はありますか?私が使用した他のカルーセルのように、これが組み込み関数ではないことに驚いています。
<div id="owl-demo" class="owl-carousel">
<div class="item">
<h2><umbraco:Item field="bigMessage" stripParagraph="true" convertLineBreaks="true" runat="server" /></h2>
<p><umbraco:Item field="messageSubtext" stripParagraph="true" convertLineBreaks="true" runat="server" /></p>
<umbraco:image runat="server" field="bannerImage" />
</div>
</div>
<script src="/owl-carousel/owl.carousel.js"></script>
<style>
#owl-demo .item img{
display: block;
width: 100%;
height: auto;
}
</style>
<script>
$(document).ready(function() {
$("#owl-demo").owlCarousel({
navigation: false,
stopOnHover: true,
paginationSpeed: 1000,
autoPlay: 5000,
goToFirstSpeed: 2000,
autoHeight : true,
transitionStyle:"fade",
singleItem: true
// "singleItem:true" is a shortcut for:
// items : 1,
// itemsDesktop : false,
// itemsDesktopSmall : false,
// itemsTablet: false,
// itemsMobile : false
});
});
</script>
新しいベータ版については以下を参照してください
thisバージョンでは、プラグインにこの設定がないようです。プラグインが初期化される前または後に、これを自分で行うことができます。
オプション1-プラグインの初期化前
最善のアプローチは、プラグインを完全に初期化する前に、この状況を検出することです。
例えば:
_$(document).ready( function () {
$owlContainer = $('#owl-demo');
$owlSlides = $owlContainer.children('div');
// More than one slide - initialize the carousel
if ($owlSlides.length > 1) {
$owlContainer.owlCarousel({
// options go here
});
// Only one slide - do something else
} else {
//...
}
});
_
オプション2-プラグインの初期化後
アイテムのスタイル設定と動的調整もプラグインに依存している場合があります。この状況では、初期化後にスライドが1つしかないことを検出して、遷移を停止できます。これは、afterInit
コールバックとstop
メソッドを使用して実行できます。
例えば:
_$(document).ready( function () {
$('#owl-demo').owlCarousel({
// other options go here
//...,
afterInit: function() {
$owlContainer = $('#owl-demo');
$owlSlides = $owlContainer.children('div');
// Only one slide - stop the carousel
if ($owlSlides.length == 1) {
$owlContainer.stop();
}
}
});
});
_
プラグインのこの新しい改良版では、APIが完全に置き換えられました。同じアプローチも可能ですが、実装は少し異なります。
オプション1-プラグインの初期化前
新しいAPIには、autoplay
という名前のオプションが含まれるようになりました。これにより、初期化されたカルーセルの動作を直接制御できます。デフォルトでは、このオプションはfalse
に設定されていますが、スライドの数に応じて自由に設定できます。
例えば:
_$(document).ready( function () {
$owlContainer = $('#owl-demo');
$owlSlides = $owlContainer.children('div');
owlAutoPlay = $owlSlide.length > 1;
$('#owl-demo').owlCarousel({
// other options go here
//...,
autoplay: owlAutoPlay
}
});
_
または、スライドの数に応じて、以前のバージョンで行ったように、プラグインを完全に初期化しないことを選択することもできます(上記のオプション1を参照) )。
オプション2-プラグインの初期化後
以前のバージョンと同様に、プラグインを初期化する必要がある場合(および、autoplay
オプションを_true)
_に設定する必要がある場合は、初期化後にカルーセルを停止することもできます。ただし、このバージョンでは、初期化コールバックオプションの名前はonInitialized
になりました。また、直接の.stop()
メソッドはありません。代わりに、カルーセルの_autoplay.stop.owl
_イベントをトリガーする必要があります。
例えば:
_$(document).ready( function () {
$('#owl-demo').owlCarousel({
// Other options go here
// ...,
onInitialized: function() {
if ($('#owl-demo').children().length == 1) {
$('#owl-demo').trigger('autoplay.stop.owl');
}
}
});
});
_
カルーセルにアイテムが1つあるかどうかを確認し、「自動再生」をアクティブにすることができます。あなたの場合、それは以下のようになります。
$(document).ready(function () {
$("#owl-demo").owlCarousel({
navigation: false,
stopOnHover: true,
paginationSpeed: 1000,
goToFirstSpeed: 2000,
autoHeight : true,
transitionStyle:"fade",
singleItem: true
autoPlay: $("#owl-demo > div").length > 1 ? 5000 : false
});
});
フクロウカルーセルと1つのアイテムの問題は、カルーセルをループさせたい場合にアイテムが表示されないことです。
以下は、カルーセルが開始される前に配置する必要のあるコードです。1つの「ループされていない」スライドのナビゲーション要素を表示したくないため、navオプションの表示と非表示も追加しました。
// Calculate number of Slides
var totalItems = $('.item').length;
// If there is only one slide
if (totalItems == 1) {
// Set loop option variable to false
var isLooped = false;
// Set nav option variable to false
var isNav = false;
} else {
// Set loop option variable to true
var isLooped = true;
// Set loop option variable to true
var isNav = true;
}
// Initiate Carousel
$('.hpSlider').owlCarousel({
//add in your dynamic variables to your options
loop: isLooped,
nav:isNav,
// then any other options...
margin:0,
video:true,
mouseDrag:false,
autoplay:true,
autoplayTimeout:3500,
autoplayHoverPause:true,
navSpeed:1300,
autoplaySpeed:1300,
responsive:{
0:{
items:1
},
600:{
items:1
},
1000:{
items:1
}
}
});
function headerSlider(owlElementID){
var autoPlay = 5000;
if (!$(owlElementID).length){
return false;
}
if ($(owlElementID).children().length <2) {
autoPlay = false;
}
$(owlElementID).owlCarousel({
autoPlay: autoPlay
私はすでにエクスポートを使用して設定しているので、代わりにこれを行いました:
exports.setup = function ($elems, options) {
if (!!!$elems.length) {return false;}
options = $.extend({}, defaultOptions, options);
if (!!options.lazyLoad) {
// See http://owlgraphic.com/owlcarousel/demos/lazyLoad.html
$elems.find('img').each(function() {
$(this).addClass('owl-lazy').data('src', $(this).attr('src'));
});
}
//Disable autoplay for "one banner only" carousels:
if($elems.find('img').length<2){
options.autoplay=false;
}
$elems.owlCarousel(options);
return $elems;
};
head.ready(function() {
onload_window();
});
return exports;
}
次のように、banner.tlpのスクリプト部分にif/elseステートメントを挿入します。
<script type="text/javascript">
var onOff = "<?php echo sizeof($banners); ?>";
if(onOff !== "1") {
onOff = 5000;
} else {
onOff = false;
}
<!--
$('#banner<?php echo $module; ?>').owlCarousel({
items: 6,
autoPlay: onOff,
singleItem: true,
navigation: true,
navigationText: ['<i class="fa fa-chevron-left fa-5x"></i>', '<i class="fa fa-chevron-right fa-5x"></i>'],
pagination: true,
transitionStyle: 'fade'
});
-->
</script>
Opencart2.2.0に含まれているバージョンのフクロウカルーセルでうまく機能します。