You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
7.9 KiB
229 lines
7.9 KiB
<?php |
|
|
|
use yii\helpers\Html; |
|
|
|
/** |
|
* @var $this \yii\web\View |
|
* @var $slider \core\entities\Slider[] |
|
* @var $tag string |
|
* @var $classes string |
|
* @var $attrs string |
|
*/ |
|
|
|
$js = <<<JS |
|
var s = $(".swiper-slider"); |
|
var pag = s.find(".swiper-pagination"), |
|
next = s.find(".swiper-button-next"), |
|
prev = s.find(".swiper-button-prev"), |
|
bar = s.find(".swiper-scrollbar"), |
|
swiperSlide = s.find(".swiper-slide"), |
|
autoplay = false; |
|
for (var j = 0; j < swiperSlide.length; j++) { |
|
var sthis = $(swiperSlide[j]), |
|
url; |
|
|
|
if (url = sthis.attr("data-slide-bg")) { |
|
sthis.css({ |
|
"background-image": "url(" + url + ")", |
|
"background-size": "cover" |
|
}) |
|
} |
|
} |
|
swiperSlide.end() |
|
.find("[data-caption-animate]") |
|
.addClass("not-animated") |
|
.end(); |
|
|
|
s.swiper({ |
|
autoplay: s.attr('data-autoplay') ? s.attr('data-autoplay') === "false" || s.attr('data-autoplay-hover') === "true" ? undefined : s.attr('data-autoplay') : 5000, |
|
direction: s.attr('data-direction') ? s.attr('data-direction') : "horizontal", |
|
effect: s.attr('data-slide-effect') ? s.attr('data-slide-effect') : "slide", |
|
speed: s.attr('data-slide-speed') ? s.attr('data-slide-speed') : 600, |
|
keyboardControl: s.attr('data-keyboard') === "true", |
|
mousewheelControl: s.attr('data-mousewheel') === "true", |
|
mousewheelReleaseOnEdges: s.attr('data-mousewheel-releaase') === "true", |
|
lazyLoading: s.attr('data-lazy-loading') === "true", |
|
nextButton: next.length ? next.get(0) : null, |
|
prevButton: prev.length ? prev.get(0) : null, |
|
pagination: pag.length ? pag.get(0) : null, |
|
paginationClickable: pag.length ? pag.attr("data-clickable") !== "false" : false, |
|
paginationBulletRender: pag.length ? pag.attr("data-index-bullet") === "true" ? function (swiper, index, className) { |
|
return '<span class="' + className + '"><span>' + ((index + 1) < 10 ? ('0' + (index + 1) ): (index + 1)) + '</span></span>'; |
|
} : null : null, |
|
scrollbar: bar.length ? bar.get(0) : null, |
|
scrollbarDraggable: bar.length ? bar.attr("data-draggable") !== "false" : true, |
|
scrollbarHide: bar.length ? bar.attr("data-draggable") === "false" : false, |
|
//loop: isNoviBuilder ? false : s.attr('data-loop') !== "false", |
|
loop: s.attr('data-loop') !== "false", |
|
//simulateTouch: s.attr('data-simulate-touch') && !isNoviBuilder ? s.attr('data-simulate-touch') === "true" : false, |
|
simulateTouch: s.attr('data-simulate-touch') ? s.attr('data-simulate-touch') === "true" : false, |
|
onTransitionStart: function (swiper) { |
|
toggleSwiperInnerVideos(swiper); |
|
}, |
|
onTransitionEnd: function (swiper) { |
|
toggleSwiperCaptionAnimation(swiper); |
|
}, |
|
onInit: function (swiper) { |
|
toggleSwiperInnerVideos(swiper); |
|
toggleSwiperCaptionAnimation(swiper); |
|
|
|
if (swiper.container.data('autoplay-hover') === true) { |
|
var hoverEvent; |
|
|
|
swiper.container.mouseenter(function (e) { |
|
hoverEvent = setInterval(function () { |
|
swiper.slideNext(); |
|
}, $(swiper.container).data('autoplay')); |
|
}); |
|
|
|
swiper.container.mouseleave(function (e) { |
|
clearInterval(hoverEvent); |
|
}); |
|
} |
|
|
|
//initLightGalleryItem(s.find('[data-lightgallery="item"]'), 'lightGallery-in-carousel'); |
|
} |
|
}); |
|
|
|
|
|
|
|
|
|
|
|
win.on("resize", (function (s) { |
|
return function () { |
|
var mh = getSwiperHeight(s, "min-height"), |
|
h = getSwiperHeight(s, "height"); |
|
if (h) { |
|
s.css("height", mh ? mh > h ? mh : h : h); |
|
} |
|
} |
|
})(s)).trigger("resize"); |
|
|
|
window.setTimeout(function() { |
|
win.trigger("resize"); |
|
}, 100); |
|
JS; |
|
$this->registerJs($js, $this::POS_READY); |
|
|
|
|
|
$js2 = <<<JS2 |
|
var win = $(window); |
|
|
|
function getSwiperHeight(object, attr) { |
|
var val = object.attr("data-" + attr), |
|
dim; |
|
|
|
if (!val) { |
|
return undefined; |
|
} |
|
|
|
dim = val.match(/(px)|(%)|(vh)|(vw)$/i); |
|
|
|
if (dim.length) { |
|
switch (dim[0]) { |
|
case "px": |
|
return parseFloat(val); |
|
case "vh": |
|
return win.height() * (parseFloat(val) / 100); |
|
case "vw": |
|
return win.width() * (parseFloat(val) / 100); |
|
case "%": |
|
return object.width() * (parseFloat(val) / 100); |
|
} |
|
} else { |
|
return undefined; |
|
} |
|
} |
|
|
|
function toggleSwiperInnerVideos(swiper) { |
|
var prevSlide = $(swiper.slides[swiper.previousIndex]), |
|
nextSlide = $(swiper.slides[swiper.activeIndex]), |
|
videos, |
|
videoItems = prevSlide.find("video"); |
|
|
|
for (var i = 0; i < videoItems.length; i++) { |
|
videoItems[i].pause(); |
|
} |
|
|
|
videos = nextSlide.find("video"); |
|
if (videos.length) { |
|
videos.get(0).play(); |
|
} |
|
} |
|
|
|
function toggleSwiperCaptionAnimation(swiper) { |
|
var prevSlide = $(swiper.container).find("[data-caption-animate]"), |
|
nextSlide = $(swiper.slides[swiper.activeIndex]).find("[data-caption-animate]"), |
|
delay, |
|
duration, |
|
nextSlideItem, |
|
prevSlideItem; |
|
|
|
for (var i = 0; i < prevSlide.length; i++) { |
|
prevSlideItem = $(prevSlide[i]); |
|
|
|
prevSlideItem.removeClass("animated") |
|
.removeClass(prevSlideItem.attr("data-caption-animate")) |
|
.addClass("not-animated"); |
|
} |
|
|
|
|
|
var tempFunction = function (nextSlideItem, duration) { |
|
return function () { |
|
nextSlideItem |
|
.removeClass("not-animated") |
|
.addClass(nextSlideItem.attr("data-caption-animate")) |
|
.addClass("animated"); |
|
if (duration) { |
|
nextSlideItem.css('animation-duration', duration + 'ms'); |
|
} |
|
}; |
|
}; |
|
|
|
for (var i = 0; i < nextSlide.length; i++) { |
|
nextSlideItem = $(nextSlide[i]); |
|
delay = nextSlideItem.attr("data-caption-delay"); |
|
duration = nextSlideItem.attr('data-caption-duration'); |
|
//if (!isNoviBuilder) { |
|
setTimeout(tempFunction(nextSlideItem, duration), parseInt(delay, 10)); |
|
//} else { |
|
// nextSlideItem.removeClass("not-animated") |
|
//} |
|
} |
|
} |
|
JS2; |
|
$this->registerJs($js2, $this::POS_END); |
|
?> |
|
|
|
<<?= $tag ?> class="<?= $classes ?>" <?= $attrs ?>> |
|
<div class="swiper-wrapper" style="transition-duration: 0ms;"> |
|
|
|
<?php foreach ($slider as $slide): ?> |
|
|
|
<div class="swiper-slide swiper-slide-active" |
|
data-slide-bg="<?= Html::encode($slide->getThumbFileUrl('image', '1920_671')) ?>" |
|
style="background-image: url("<?= Html::encode($slide->getThumbFileUrl('image', '1920_671')) ?>"); background-size: cover; width: 1903px; transform: translate3d(-1903px, 0px, 0px); opacity: 1; transition-duration: 0ms;" |
|
data-swiper-slide-index="0"> |
|
<div class="container"> |
|
<div class="swiper-slide-caption"> |
|
<h1 data-caption-animate="fadeInUp" data-caption-delay="100" class="fadeInUp animated"> |
|
<?= str_replace(PHP_EOL, "<br>", Html::encode($slide->title)) ?></h1> |
|
<h4 data-caption-animate="fadeInUp" data-caption-delay="200" class="fadeInUp animated"> |
|
<?= str_replace(PHP_EOL, "<br>", Html::encode($slide->tagline)) ?> |
|
</h4><a |
|
class="button button-gray-outline fadeInUp animated" data-caption-animate="fadeInUp" |
|
data-caption-delay="300" href="#"><?= Yii::t('slider', 'Read more') ?></a> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<?php endforeach; ?> |
|
|
|
</div> |
|
<div class="swiper-button swiper-button-prev"></div> |
|
<div class="swiper-button swiper-button-next"></div> |
|
<div class="swiper-pagination swiper-pagination-clickable swiper-pagination-bullets"> |
|
<span class="swiper-pagination-bullet swiper-pagination-bullet-active"></span> |
|
<span class="swiper-pagination-bullet"></span> |
|
</div> |
|
</<?= $tag ?>>
|
|
|