Skip to content

Commit f77f769

Browse files
committed
PB-266: Video background for Slide
1 parent 50861fb commit f77f769

File tree

6 files changed

+83
-29
lines changed

6 files changed

+83
-29
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/content-type/slide/_default.less

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,38 @@
126126
overflow-wrap: break-word;
127127
word-wrap: break-word;
128128

129-
&[data-background-type='video'][data-play-only-visible='true'] {
130-
transform: translate3d(0, 150vh, 0);
131129

132-
&.video-inserted,
130+
&.jarallax {
131+
.video-overlay {
132+
z-index: 1;
133+
}
134+
135+
.pagebuilder-overlay {
136+
position: relative;
137+
z-index: 2;
138+
}
139+
140+
[id*='jarallax-container'] {
141+
> div,
142+
> img,
143+
> video,
144+
> iframe {
145+
margin: auto !important;
146+
transform: none !important;
147+
}
148+
}
149+
}
150+
151+
.jarallax-viewport-element {
152+
height: 100%;
153+
left: -150vw;
154+
position: absolute;
155+
top: 0;
156+
width: 1px;
157+
z-index: 100;
158+
133159
.slick-current & {
134-
transform: translate3d(0, 0, 0);
160+
left: 0;
135161
}
136162
}
137163

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/slide/preview.js

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/slide/preview.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,15 @@ export default class Preview extends BasePreview {
106106
(this.wrapper.dataset.backgroundType as string) === "video" &&
107107
(this.wrapper.dataset.videoSrc as string).length
108108
) {
109+
109110
_.defer(() => {
110111
// Build Parallax on elements with the correct class
112+
const viewportElement = $("<div class=\"jarallax-viewport-element\"></div>") as JQuery;
113+
114+
$(this.wrapper).append(
115+
$('.jarallax-viewport-element', this.wrapper).length ? '' : viewportElement
116+
);
117+
111118
jarallax(
112119
this.wrapper,
113120
{
@@ -116,7 +123,7 @@ export default class Preview extends BasePreview {
116123
videoLoop: (this.contentType.dataStore.get("video_loop") as string) === "true",
117124
speed: 1,
118125
videoPlayOnlyVisible: (this.contentType.dataStore.get("video_play_only_visible") as string) === "true",
119-
videoLazyLoading: (this.contentType.dataStore.get("video_lazy_load") as string) === "true",
126+
elementInViewport: $('.jarallax-viewport-element', this.wrapper)
120127
},
121128
);
122129
});
@@ -501,7 +508,13 @@ export default class Preview extends BasePreview {
501508
$((slider.preview as SliderPreview).element).on("beforeChange", () => {
502509
this.slideChanged = false;
503510
});
504-
$((slider.preview as SliderPreview).element).on("afterChange", () => {
511+
$((slider.preview as SliderPreview).element).on("afterChange", (event, slider) => {
512+
$(slider.$slides).each((index, slide) => {
513+
const videoSlide = slide.querySelector('.jarallax');
514+
if (videoSlide) {
515+
jarallax(videoSlide, 'onScroll');
516+
}
517+
});
505518
this.slideChanged = true;
506519
});
507520
}

app/code/Magento/PageBuilder/view/base/web/js/content-type/slide/appearance/default/widget.js

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,30 @@ define([
1111

1212
return function (config, element) {
1313
var videoElement = element[0].querySelector('[data-background-type=video]'),
14+
viewportElement = document.createElement('div'),
1415
$slider = null;
1516

1617
showOnHover(config);
1718

1819
if (videoElement) {
1920
$slider = $(element).closest('[data-content-type=slider]');
21+
viewportElement.classList.add('jarallax-viewport-element');
22+
videoElement.setAttribute('data-element-in-viewport', '.jarallax-viewport-element');
23+
videoElement.appendChild(viewportElement);
2024
videoBackground(config, videoElement);
21-
$slider.on('setPosition', function (event, slick) {
22-
var currentVideoSlide = slick.$slides[slick.currentSlide].querySelector('.jarallax');
2325

24-
if (currentVideoSlide.jarallax.options.videoPlayOnlyVisible) {
25-
currentVideoSlide.jarallax.video.play();
26-
}
26+
if ($slider.data('afterChangeIsSet')) {
27+
return;
28+
}
2729

28-
if (videoElement.jarallax.isVideoInserted) {
29-
videoElement.classList.add('video-inserted');
30-
}
31-
});
32-
$slider.on('beforeChange', function (event, slick) {
33-
var currentVideoSlide = slick.$slides[slick.currentSlide].querySelector('.jarallax');
30+
$slider.on('afterChange', function () {
31+
var videoSlides = $slider[0].querySelectorAll('.jarallax');
3432

35-
if (currentVideoSlide.jarallax.options.videoPlayOnlyVisible) {
36-
currentVideoSlide.jarallax.video.pause();
37-
}
33+
videoSlides.forEach(function (videoSlide) {
34+
videoSlide.jarallax.onScroll();
35+
});
3836
});
37+
$slider.data('afterChangeIsSet', true)
3938
}
4039
};
4140
});

app/code/Magento/PageBuilder/view/base/web/js/widget/video-background.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ define([
2727
videoLoop: $element.data('videoLoop'),
2828
videoPlayOnlyVisible: $element.data('videoPlayOnlyVisible'),
2929
videoLazyLoading: $element.data('videoLazyLoad'),
30-
disableVideo: false
30+
disableVideo: false,
31+
elementInViewport: $element.data('elementInViewport') && $element[0].querySelector($element.data('elementInViewport'))
3132
});
3233
};
3334
});

app/code/Magento/PageBuilder/view/frontend/web/css/source/content-type/slide/_default.less

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,16 @@
4444
overflow-wrap: break-word;
4545
word-wrap: break-word;
4646

47-
&[data-background-type='video'][data-play-only-visible='true'] {
48-
transform: translate3d(0, 150vh, 0);
47+
.jarallax-viewport-element {
48+
height: 100%;
49+
left: -150vw;
50+
position: absolute;
51+
top: 0;
52+
width: 1px;
53+
z-index: 100;
4954

50-
&.video-inserted,
5155
.slick-current & {
52-
transform: translate3d(0, 0, 0);
56+
left: 0;
5357
}
5458
}
5559

@@ -64,8 +68,10 @@
6468
}
6569

6670
[id*='jarallax-container'] {
67-
video,
68-
iframe {
71+
> div,
72+
> img,
73+
> video,
74+
> iframe {
6975
margin: auto !important;
7076
transform: none !important;
7177
}

0 commit comments

Comments
 (0)