<div class="hero-overlay-video " data-behavior="hero-overlay-video" data-video-type="vimeo" data-video-id="516264036">
    <div class="hero-overlay-video__player-wrap">
        <div id="vimeo-player" class="vimeo-video-player"></div>
        <img src="/assets/example-content/hero-overlay-background-image.jpg" />
    </div>
    <div class="control-overlay">
        <div class="play-pause-controls">
            <a class="play-pause-controls__play hidden" role="video play" aria-label="video play" tabindex="0" aria-selected="true"></a>
            <a class="play-pause-controls__pause" role="video pause button" aria-label="video pause button play" tabindex="0" aria-selected="true"></a>
        </div>
        <div class="mute-unmute-controls">
            <a class="mute-unmute-controls__mute hidden" role="mute" aria-label="mute" aria-selected="true" tabindex="0"></a>
            <a class="mute-unmute-controls__unmute" role="unmute button" aria-label="it isunmute pleasemute" tabindex="0" aria-selected="true"></a>
        </div>
    </div>
    <div class="hero-overlay-video__gradient"></div>
    <div class="hero-overlay-video__textoverlay">
        <div class="hero-section">
            <div class="hero-section__partner-logos">
                <img src="/assets/example-content/hero-partner-bt.png" alt="Nike" />
                <img src="/assets/example-content/hero-partner-deliveroo.png" alt="BT" />
            </div>
            <h3 class="hero-section__title">Eight England outsiders making a case for Gareth Southgate&#x27;s match against Iceland</h3>
            <div class="hero-section__description">Lorem ipsum dolor sit amet, consectetur</div>
            <div class="hero-section__count-down">
                <div class="days"><span>2</span>Days</div>
                <div class="hours"><span>3</span>Hours</div>
                <div class="minutes"><span>2</span>Minutes</div>
                <div class="seconds"><span>12</span>Seconds</div>
            </div>
            <div class="hero-section__cta">
                <a href="/" class="cta cta--secondary ">
                    <p>Latest News</p>
                </a>

            </div>
        </div>
    </div>
</div>

No notes defined.

{
  "shallow": "",
  "videoId": "516264036",
  "type": "vimeo",
  "overlay": {
    "countdown": {
      "day": "2",
      "hours": "3",
      "minutes": "2",
      "seconds": "12"
    },
    "cta": {
      "modifier": "secondary",
      "copy": "Latest News"
    }
  }
}
  • Content:
    import Player from '@vimeo/player';
    import { loadYouTubeApi } from '../../../components/video/video';
    
    export default parentElement => {
      const { videoId, videoType } = parentElement.dataset;
      const videoPlayerId = parentElement
        .querySelector('.vimeo-video-player')
        .getAttribute('id');
      const playButton = parentElement.querySelector('.play-pause-controls__play');
      const muteButton = parentElement.querySelector('.mute-unmute-controls__mute');
      const pauseButton = parentElement.querySelector(
        '.play-pause-controls__pause'
      );
      const unmuteButton = parentElement.querySelector(
        '.mute-unmute-controls__unmute'
      );
    
      // eslint-disable-next-line no-unused-vars
      let videoPlayer;
    
      if (!videoId) {
        return;
      }
    
      const resizeVideo = () => {
        const headerHeight = document.querySelector('.global-fixed-header')
          .offsetHeight;
        const screenWidth = document.getElementsByTagName('body')[0].clientWidth;
        const screenHeight = window.innerHeight - headerHeight;
        const playerWidth = screenHeight * (16 / 9);
    
        if (playerWidth < screenWidth && parentElement.querySelector('iframe')) {
          const playerHeight = screenWidth * (9 / 16);
          const PlayerWidth = screenWidth;
    
          // eslint-disable-next-line no-param-reassign
          parentElement.querySelector('iframe').style.height = `${playerHeight}px`;
          // eslint-disable-next-line no-param-reassign
          parentElement.querySelector('iframe').style.width = `${PlayerWidth}px`;
        }
      };
    
      const onPlayerError = () => {
        parentElement.classList.remove('vimeo-player-loaded');
      };
    
      const onPlayerReady = () => {
        // To capture error on video
        videoPlayer.playVideo();
        videoPlayer.mute();
        parentElement.classList.add('vimeo-player-loaded');
        resizeVideo();
      };
    
      const initVideo = () => {
        videoPlayer = new window.YT.Player(videoPlayerId, {
          height: '390',
          width: '640',
          videoId,
          playsinline: 1,
          controls: 0,
          loop: 1,
          events: {
            onReady: onPlayerReady,
            onError: onPlayerError,
          },
        });
      };
    
      if (videoType === 'youtube') {
        if (
          window.YouTubeIframeApiReady === undefined ||
          window.YouTubeIframeApiReady === false
        ) {
          loadYouTubeApi();
          window.onYouTubeIframeAPIReady = () => {
            window.YouTubeIframeApiReady = true;
            initVideo();
          };
        } else {
          initVideo();
        }
      } else {
        // eslint-disable-next-line no-undef
        videoPlayer = new Player(videoPlayerId, {
          id: videoId,
          autoplay: 1,
          muted: 1,
          title: 0,
          sidedock: 0,
          controls: 0,
          loop: 1,
          quality: 'auto',
          width: '100%',
          height: '100%',
        });
    
        videoPlayer
          .play()
          .then(() => {
            parentElement.classList.add('vimeo-player-loaded');
            // The video is loadded
            resizeVideo();
          })
          .catch(() => {
            // console.log(error.name);
          });
      }
      playButton.addEventListener('click', () => {
        if (videoType === 'youtube') {
          videoPlayer.playVideo();
        } else {
          videoPlayer.play();
        }
        playButton.classList.toggle('hidden');
        pauseButton.classList.toggle('hidden');
      });
      playButton.addEventListener('keyup', event => {
        if (event.keyCode === 13) {
          // Cancel the default action, if needed
          event.preventDefault();
          playButton.click();
        }
      });
      pauseButton.addEventListener('click', () => {
        if (videoType === 'youtube') {
          videoPlayer.pauseVideo();
        } else {
          videoPlayer.pause();
        }
        playButton.classList.toggle('hidden');
        pauseButton.classList.toggle('hidden');
      });
      pauseButton.addEventListener('keyup', event => {
        if (event.keyCode === 13) {
          // Cancel the default action, if needed
          event.preventDefault();
          pauseButton.click();
        }
      });
      muteButton.addEventListener('click', () => {
        if (videoType === 'youtube') {
          videoPlayer.mute();
        } else {
          videoPlayer.setMuted(1);
        }
        muteButton.classList.toggle('hidden');
        unmuteButton.classList.toggle('hidden');
      });
      muteButton.addEventListener('keyup', event => {
        if (event.keyCode === 13) {
          // Cancel the default action, if needed
          event.preventDefault();
          muteButton.click();
        }
      });
      unmuteButton.addEventListener('click', () => {
        if (videoType === 'youtube') {
          videoPlayer.unMute();
        } else {
          videoPlayer.setMuted(0);
        }
        muteButton.classList.toggle('hidden');
        unmuteButton.classList.toggle('hidden');
      });
      unmuteButton.addEventListener('keyup', event => {
        if (event.keyCode === 13) {
          // Cancel the default action, if needed
          event.preventDefault();
          unmuteButton.click();
        }
      });
      if (window.innerWidth < 820) {
        parentElement
          .querySelector('.hero-overlay-video__gradient')
          .addEventListener('click', () => {
            if (
              window
                .getComputedStyle(parentElement.querySelector('.control-overlay'))
                .getPropertyValue('opacity') === '1'
            ) {
              // eslint-disable-next-line no-param-reassign
              parentElement.querySelector('.control-overlay').style.opacity = '0';
              // eslint-disable-next-line no-param-reassign
              parentElement.querySelector(
                '.hero-overlay-video__gradient'
              ).style.opacity = '0';
            } else {
              // eslint-disable-next-line no-param-reassign
              parentElement.querySelector('.control-overlay').style.opacity = '1';
              // eslint-disable-next-line no-param-reassign
              parentElement.querySelector(
                '.hero-overlay-video__gradient'
              ).style.opacity = '1';
            }
          });
      }
      window.addEventListener('resize', () => resizeVideo());
    };
    
  • URL: /components/raw/hero-overlay-video/hero-overlay-video.js
  • Filesystem Path: src/library/modules/hero-overlay-banner/hero-overlay-video/hero-overlay-video.js
  • Size: 5.8 KB
  • Content:
    .hero-overlay-video {
      position: relative;
      width: 100%;
      height: calc(100vh - 64px);
      z-index: 0;
      &__player-wrap {
        z-index: 10;
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        pointer-events: none;
        overflow: hidden;
    
        iframe {
          object-fit: cover;
          width: 177.77%;
          height: 100vw !important;
          position: absolute;
          transform: translate(-50%, -50%);
          top: 50%;
          left: 50%;
          pointer-events: none;
          .player {
            width: 100% !important;
            height: 100% !important;
            object-fit: cover !important;
          }
        }
        img {
          object-fit: cover;
          width: 100%;
          height: 100%;
        }
        .vimeo-video-player {
          display: none;
        }
      }
    
      @mixin transition($params) {
        -webkit-transition: $params;
        -moz-transition: $params;
        -khtml-transition: $params;
        -o-transition: $params;
        transition: $params;
      }
    
      .control-overlay {
        position: absolute;
        bottom: 3.5rem;
        z-index: 14;
        width: 100%;
        opacity: 0;
        transition: opacity 0.3s ease-in-out;
        min-height: 4rem;
        display: none;
        a {
          display: inline-block;
        }
        a.hidden {
          display: none;
        }
        .play-pause-controls {
          float: left;
          margin-left: 4.2rem;
          &__play {
            background: url(./assets/images/video-play-button.svg) no-repeat center;
            width: 2.5rem;
            height: 2.9rem;
            background-size: 100%;
    
            @include transition(transform 0.3s ease-in-out);
            &:hover {
              transform: scale(1.2);
            }
            &:active {
              transform: scale(1.2);
            }
          }
          &__pause {
            background: url(./assets/images/video-pause-button.svg) no-repeat center;
            width: 1.9rem;
            height: 3.4rem;
            background-size: 100%;
    
            @include transition(transform 0.3s ease-in-out);
            &:hover {
              transform: scale(1.2);
            }
            &:active {
              transform: scale(1.2);
            }
          }
        }
        .mute-unmute-controls {
          float: right;
          margin-right: 3.2rem;
          &__mute {
            background: url(./assets/images/video-sound-on.svg) no-repeat 3px center;
            width: 4.4rem;
            height: 3.2rem;
            background-size: 100%;
    
            @include transition(transform 0.3s ease-in-out);
            &:hover {
              transform: scale(1.2);
            }
            &:active {
              transform: scale(1.2);
            }
          }
          &__unmute {
            background: url(./assets/images/video-sound-off.svg) no-repeat center;
            width: 4.2rem;
            height: 3.1rem;
            background-size: 100%;
    
            @include transition(transform 0.3s ease-in-out);
            &:hover {
              transform: scale(1.2);
            }
            &:active {
              transform: scale(1.2);
            }
          }
        }
      }
      &__textoverlay {
        @extend .heading-1;
    
        color: $white;
        position: absolute;
        z-index: 11;
        width: 100%;
        height: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        text-align: center;
        padding: 0 2.4rem;
      }
      &__gradient {
        bottom: 0;
        content: '';
        height: 100%;
        top: 0;
        width: 100%;
        position: absolute;
        z-index: 11;
        opacity: 0;
        transition: opacity 0.3s ease-in-out;
        display: none;
        &::after {
          background: linear-gradient(
            180deg,
            rgba(0, 0, 0, 0) 45.31%,
            rgba(1, 30, 65, 0.204) 68.68%,
            rgba(1, 30, 65, 0.6) 94.79%
          );
          bottom: 0;
          content: '';
          display: block;
          height: 100%;
          position: absolute;
          top: 0;
          width: 100%;
        }
      }
      &.vimeo-player-loaded {
        .hero-overlay-video__player-wrap {
          .vimeo-video-player {
            display: block;
          }
          img {
            display: none;
          }
        }
        .control-overlay {
          display: block;
        }
        .hero-overlay-video__gradient {
          display: block;
        }
    
        &:hover {
          .control-overlay {
            opacity: 1;
          }
        }
      }
      &.shallow {
        height: 42.4rem !important;
        background-color: rgba(1, 30, 65, 0.3);
      }
    
      @media screen and (max-width: $mq-medium) and (orientation: portrait) {
        iframe {
          height: 100vh !important;
          width: 177.77vh;
        }
      }
    
      @media screen and (min-width: $mq-medium) and (orientation: portrait) {
        iframe {
          height: 100vh;
          width: 177.77vh;
        }
      }
    
      @media screen and (min-width: $mq-medium) {
        height: calc(100vh - 81px);
    
        &__textoverlay {
          font-size: 7.8rem;
          line-height: 6.8rem;
        }
        &.vimeo-player-loaded:hover {
          .control-overlay {
            opacity: 1;
          }
          .hero-overlay-video__gradient {
            opacity: 1;
          }
        }
        /* stylelint-disable no-descending-specificity */
        &.shallow {
          height: 48rem !important;
    
          iframe {
            width: 1400px !important;
            height: calc(1400px * 0.5625) !important;
          }
          .control-overlay {
            width: 960px;
            margin: 0 auto;
            left: 0;
            right: 0;
          }
        }
      }
    
      @media screen and (min-width: 820px) and (max-width: 980px) {
        .control-overlay {
          width: 100% !important;
        }
      }
    
      @media screen and (min-width: 1100px) {
        &.shallow {
          .hero-overlay-video__textoverlay {
            left: 0;
            right: 0;
            margin: 0 auto;
          }
        }
      }
    }
    
    .fixed-banner {
      .hero-overlay-video {
        position: fixed;
        top: 64px;
        height: 57.6rem;
    
        @media screen and (min-width: $mq-medium) {
          top: 81px;
          height: 54rem;
        }
    
        @media screen and (min-width: 820px) and (max-width: 980px) {
          height: 47rem;
        }
    
        @media screen and (min-width: 1440px) {
          height: 61.9rem;
        }
      }
    }
    
  • URL: /components/raw/hero-overlay-video/hero-overlay-video.scss
  • Filesystem Path: src/library/modules/hero-overlay-banner/hero-overlay-video/hero-overlay-video.scss
  • Size: 5.7 KB
<div class="hero-overlay-video {{#if shallow}}shallow{{/if}}"data-behavior="hero-overlay-video" data-video-type="{{type}}"
  data-video-id="{{videoId}}">
  <div class="hero-overlay-video__player-wrap">
    <div id="vimeo-player" class="vimeo-video-player"></div>
    <img src="/assets/example-content/hero-overlay-background-image.jpg" />
  </div>
  <div class="control-overlay">
    <div class="play-pause-controls">
      <a class="play-pause-controls__play hidden" role="video play" aria-label="video play" tabindex="0"
        aria-selected="true"></a>
      <a class="play-pause-controls__pause" role="video pause button" aria-label="video pause button play" tabindex="0"
        aria-selected="true"></a>
    </div>
    <div class="mute-unmute-controls">
      <a class="mute-unmute-controls__mute hidden" role="mute" aria-label="mute" aria-selected="true" tabindex="0"></a>
      <a class="mute-unmute-controls__unmute" role="unmute button" aria-label="it isunmute pleasemute" tabindex="0"
        aria-selected="true"></a>
    </div>
  </div>
  <div class="hero-overlay-video__gradient"></div>
  <div class="hero-overlay-video__textoverlay">
    {{render '@hero-section' overlay merge="true"}}
  </div>
</div>