| @@ -0,0 +1,51 @@ | |||||
| import {createVideoStage} from "./VideoStageComponent"; | |||||
| export default { | |||||
| title: 'Sections/Video Stage', | |||||
| parameters: { | |||||
| layout: 'fullscreen', | |||||
| }, | |||||
| args: { | |||||
| imageSrc: 'https://source.unsplash.com/2vCqH34PqWs/1080x648', | |||||
| kicker: 'Noch 7 Tage offen', | |||||
| headline: 'Jetzt und digital mitreden', | |||||
| copy: 'Mit der digitalen Beteiligung erhalten Mitgliedsunternehmen die Möglichkeit, sich einfach und schnell über laufende Verfahren und Abstimmungen zu informieren und sich aktiv daran zu beteiligen.', | |||||
| buttonCta: { | |||||
| label: 'Jetzt beteiligen', | |||||
| link: '#', | |||||
| target: '_self', | |||||
| }, | |||||
| }, | |||||
| argTypes: { | |||||
| imageSrc: { | |||||
| name: 'Bild-Url', | |||||
| }, | |||||
| kicker: { | |||||
| name: 'Dachzeile', | |||||
| }, | |||||
| headline: { | |||||
| name: 'Überschrift', | |||||
| }, | |||||
| copy: { | |||||
| name: 'Kurztext', | |||||
| }, | |||||
| buttonCta: { | |||||
| name: 'Button', | |||||
| }, | |||||
| }, | |||||
| } | |||||
| const Template = ({...args}) => { | |||||
| return createVideoStage({...args}); | |||||
| }; | |||||
| export const VideoIntro = Template.bind({}); | |||||
| VideoIntro.args = { | |||||
| imageSrc: null, | |||||
| kicker: 'IHK Musterstadt Beteiligungsportal', | |||||
| buttonCta: { | |||||
| label: 'Mehr erfahren', | |||||
| link: '#', | |||||
| target: '_self', | |||||
| }, | |||||
| }; | |||||
| @@ -0,0 +1,72 @@ | |||||
| import './video-stage.scss'; | |||||
| import $ from "jquery"; | |||||
| import VideoStage from "./video-stage"; | |||||
| import {createElement} from "../../_global/scripts/helpers"; | |||||
| import {createButton} from "../../atoms/button/ButtonComponent"; | |||||
| export const createVideoStage = ({ | |||||
| videoSrc = 'https://source.unsplash.com/2vCqH34PqWs/1080x648', | |||||
| imageSrc = 'https://source.unsplash.com/2vCqH34PqWs/1080x648', | |||||
| kicker = 'Noch 7 Tage offen', | |||||
| headline = 'Jetzt und digital mitreden', | |||||
| copy = 'Mit der digitalen Beteiligung erhalten Mitgliedsunternehmen die Möglichkeit, sich einfach und schnell über laufende Verfahren und Abstimmungen zu informieren und sich aktiv daran zu beteiligen.', | |||||
| buttonCta = { | |||||
| label: 'Jetzt beteiligen', | |||||
| link: '#', | |||||
| target: '_self', | |||||
| }, | |||||
| isFirstElement = false, | |||||
| }) => { | |||||
| const hasVideo = videoSrc && videoSrc.length > 0; | |||||
| const hasImage = imageSrc && imageSrc.length > 0; | |||||
| const videoStage = createElement('section', ['video-stage']); | |||||
| if(hasVideo) { | |||||
| const videoContainer = createElement('div', ['video-container'], null, videoStage); | |||||
| const video = createElement('video', [], null, videoContainer); | |||||
| video.autoplay = true; | |||||
| video.loop = true; | |||||
| video.muted = true; | |||||
| // video.controls = true; | |||||
| const source = createElement('source', [], null, video); | |||||
| source.type = "video/mp4"; | |||||
| source.src = "https://s3.amazonaws.com/akamai.netstorage/HD_downloads/Orion_SM.mp4"; | |||||
| if (hasImage) { | |||||
| video.poster = imageSrc; | |||||
| } | |||||
| const controls = createElement('div', ['video--controls'], null, videoContainer); | |||||
| const playPause = createElement('span', ['video--play-pause'], null, controls); | |||||
| const muteUnmute = createElement('span', ['video--mute-unmute'], null, controls); | |||||
| } | |||||
| const container = createElement('div', ['container'], null, videoStage); | |||||
| const row = createElement('div', ['row'], null, container); | |||||
| const col = createElement('div', ['col'], null, row); | |||||
| const tb = createElement('div', ['text-box'], null, col); | |||||
| if (isFirstElement) { | |||||
| videoStage.classList.add('first-element'); | |||||
| } | |||||
| if (kicker && kicker.length > 0) { | |||||
| createElement('p', ['kicker'], kicker, tb); | |||||
| } | |||||
| createElement('h1', ['like-h2'], headline, tb); | |||||
| createElement('p', [], copy, tb); | |||||
| if (buttonCta) { | |||||
| const button = createButton({ | |||||
| elementType: 'a', | |||||
| link: buttonCta.link, | |||||
| color: 'white', | |||||
| label: buttonCta.label, | |||||
| iconPosition: 'icon-right', | |||||
| icon: 'small-arrow-right-simple', | |||||
| }); | |||||
| tb.appendChild(button); | |||||
| } | |||||
| $(document).ready(() => { | |||||
| // console.log($(videoStage)); | |||||
| const n = new VideoStage($(videoStage)); | |||||
| }) | |||||
| return videoStage; | |||||
| } | |||||
| @@ -0,0 +1,42 @@ | |||||
| import $ from "jquery"; | |||||
| class VideoStage { | |||||
| constructor(videoStage) { | |||||
| // setTimeout(function() { | |||||
| // videoStage.find("video").play(); | |||||
| // }, 5000); | |||||
| $(videoStage.find(".video--play-pause")).on("click", (e) => { | |||||
| e.preventDefault(); | |||||
| let t = $(e.currentTarget); | |||||
| this.playPause(videoStage.find("video")[0], t); | |||||
| }); | |||||
| $(videoStage.find(".video--mute-unmute")).on("click", (e) => { | |||||
| e.preventDefault(); | |||||
| let t = $(e.currentTarget); | |||||
| this.muteUnmute(videoStage.find("video")[0], t); | |||||
| }); | |||||
| } | |||||
| playPause (video, target) { | |||||
| if (video.paused) { | |||||
| video.play(); | |||||
| target.removeClass("paused"); | |||||
| } else { | |||||
| video.pause(); | |||||
| target.addClass("paused"); | |||||
| } | |||||
| } | |||||
| muteUnmute(video, target) { | |||||
| if (video.muted) { | |||||
| video.muted = false; | |||||
| target.addClass("unmuted"); | |||||
| } | |||||
| else { | |||||
| video.muted = true; | |||||
| target.removeClass("unmuted"); | |||||
| } | |||||
| } | |||||
| } | |||||
| export default VideoStage; | |||||
| @@ -0,0 +1,98 @@ | |||||
| @import '../../_global/styles/mixins'; | |||||
| @import '../../_global/styles/vars'; | |||||
| .video-stage { | |||||
| background: red; | |||||
| color: white; | |||||
| min-height: calc(18vw + 300px); | |||||
| display: flex; | |||||
| align-items: center; | |||||
| margin: 0; | |||||
| position: relative; | |||||
| .video-container { | |||||
| position: absolute; | |||||
| left: 0; | |||||
| top: 0; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| background: blue; | |||||
| video { | |||||
| display: block; | |||||
| position: absolute; | |||||
| top: 0; | |||||
| left: 0; | |||||
| width: 100%; | |||||
| height: 100%; | |||||
| object-fit: cover; | |||||
| background: green; | |||||
| } | |||||
| .video--controls { | |||||
| position: absolute; | |||||
| left: 20px; | |||||
| bottom: 20px; | |||||
| display: flex; | |||||
| gap: 20px; | |||||
| } | |||||
| .video--play-pause, | |||||
| .video--mute-unmute { | |||||
| display: block; | |||||
| width: 30px; | |||||
| height: 30px; | |||||
| cursor: pointer; | |||||
| &:before { | |||||
| font-family: 'Icons', sans-serif; | |||||
| font-size: var(--icon-size); | |||||
| line-height: 1; | |||||
| } | |||||
| &:hover { | |||||
| color: var(--theme-color-secondary); | |||||
| } | |||||
| } | |||||
| .video--play-pause { | |||||
| &:before { | |||||
| @include icon-sanduhr; | |||||
| } | |||||
| &.paused { | |||||
| &:before { | |||||
| @include icon-schloss; | |||||
| } | |||||
| } | |||||
| } | |||||
| .video--mute-unmute { | |||||
| &:before { | |||||
| @include icon-stern; | |||||
| } | |||||
| &.unmuted { | |||||
| &:before { | |||||
| @include icon-schliessen; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| .container { | |||||
| position: relative; | |||||
| } | |||||
| &.first-element { | |||||
| @media(min-width: 1400px) { | |||||
| margin-top: -60px; | |||||
| } | |||||
| } | |||||
| .kicker { | |||||
| margin-bottom: 0.6em; | |||||
| } | |||||
| .btn { | |||||
| margin-top: 0.8em; | |||||
| margin-bottom: 0.4em; | |||||
| } | |||||
| .text-box { | |||||
| max-width: 580px; | |||||
| padding: calc(50px + 1vw) 0; | |||||
| } | |||||
| } | |||||