Показывать видео html5 / youtube при прокрутке

У меня есть видео (в настоящее время это встроенное видео YT, но может быть обычным mp4 / HTML5), которое я хотел бы показать при прокрутке. Поэтому при прокрутке текстовое содержимое должно выходить наверх, а затем должно открываться видео, и пользователь должен иметь возможность нажимать Play - возможно, это какой-то эффект параллакса, но я не смог найти ничего похожего ... Любой другое / лучшее решение очень приветствуется!

Обновлено: Это эффект, которого я хочу достичь - может быть, есть какое-то решение ScrollMagic ..? https://www.invisionapp.com/studio

Ручка: https://codepen.io/anon/pen/wjMwqE

.container {
  width: 1200px;
  height: 600px;
  margin: 0 auto;
  background: lightgrey;
  padding: 100px;
}

.video-container {
  width: 800px;
  background-color: lightblue;
  margin: 100px auto;
  position: relative;
}

.text-container {
  width: 100%;
  height: 100%;
  background-color: rgba(234, 654, 123, .3);
  position: absolute;
  top: 0;
  left: 0;
}

.text-container-content {
    text-align: center;
    margin: 150px auto;
}
<div class = "container">
  <div class = "video-container">
    <iframe width = "800" height = "415" src = "https://www.youtube.com/embed/HECa3bAFAYk" frameborder = "0" allow = "autoplay; encrypted-media" allowfullscreen></iframe>
    <div class = "text-container">
      <div class = "text-container-content">
        <h3>Title here</h3>
        <p>Subtitle here</p>
        <button>Button</button>
      </div>
    </div>
  </div>
</div>

(«Повторяющийся» ответ не имеет аналогичного видео-примера)

там ничего с видео ...

Smithy 23.04.2018 10:40
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
2
2
262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто попытайтесь понять, что я сделал на скрипке ниже. Это не так сложно, как могло бы показаться.

В основном вы просто получаете height элемента .overlay, а затем, когда пользователь прокручивает, отслеживайте положение прокрутки с помощью функции scrollTop().

scrollTop(): Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element.

Когда scrollTop() достигнет overlayHeight, покажите button.

Также продолжайте добавлять marginTop: scrollTop(), пока выше предложение не станет true. Чтобы элемент .show-when-visible оставался видимым, а не сидел в верхней части document.


Обратите внимание, что приведенный ниже фрагмент представляет собой базовую демонстрацию, показывающую, как вы можете достичь что ты хочешь. Конечно, вы можете добавить event к buttonShowWhenVisible. Что открывает всплывающее окно / iframe с соответствующим видео. то есть:

buttonShowWhenVisible.click(function() {
    // code the show the video
});

Открыть ниже фрагмент в полноэкранном режиме

$(document).ready(function() {
  
  var win = $(window); // Window
  var content = $(".content") // Content jquery element
  var overlay = $(".overlay"); // Overlay jquery element
  var buttonShowWhenVisible = $(".show-when-visible"); // This is the button which will fade in
  var showAfterScroll = $(".show-after-scroll"); // On scroll fade in
  
  var overlayHeight, scrollTop, stopMargin, opacityOut, opacityIn;
  
  win.scroll(function(e) {
    
    scrollTop = win.scrollTop();
    overlayHeight = overlay.outerHeight(); // The height of the overlay
    stopMargin = false;
    opacityOut = (1 - scrollTop / overlayHeight);
    opacityIn = (scrollTop / overlayHeight);
    
    if (opacityOut > 0.00)
      overlay.css("opacity", opacityOut);
    
    if (opacityIn < 1)
      showAfterScroll.css("opacity", opacityIn);
    
    if (scrollTop >= overlayHeight) {
      stopMargin = true;
      buttonShowWhenVisible.fadeIn();
    } else {
      buttonShowWhenVisible.fadeOut();
    }
    
    // Keep adding margin on top so that the element stays in the view until it reached overlayheight
    if (!stopMargin) {
      content.css({
        marginTop: scrollTop
      });
    }
    
  });
  
});
@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700');

* {
  box-sizing: border-box;
}

body {
  font-family: 'Montserrat', sans-serif;
  font-size: 14px;
}

h1 span {
  color: orange;
}

.content {
  min-height: 2000px;
}

.overlay {
  background-color: rgba(0, 0, 0, .8);
  position: absolute;
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  color: #fff;
  padding: 40px 0;
  text-align: center;
  z-index: 9999;
}

.show-after-scroll {
  text-align: center;
  padding: 60px 0;
  opacity: 0;
}

.btn-lg {
  background-color: orange;
  color: #fff;
  font-size: 12px;
  padding: 20px 80px;
  border-radius: 40px;
  border: none;
}

.show-when-visible {
  display: none;
}

.overlay p {
  max-width: 600px;
  font-size: 44px;
  margin: 0 auto;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "content">
  <div class = "overlay">
    <h1>Studio<span>.</span></h1>
    <p>This is some long big text saying hello</p>
    <br/><br/><br/>
    <button class = "btn-lg">REQUEST EARLY ACCESS</button>
  </div>
  <div class = "show-after-scroll">
    <p>There will a button appear when you scroll down, try it out!</p>
    <button class = "btn-lg show-when-visible">BONJOUR</button>
  </div>
</div>

Вы можете поиграть с фрагментом здесь: https://codepen.io/richardmauritz/pen/QrKvBQ?editors=0010

Большое спасибо за такой длинный ответ, я постараюсь разобраться и применить. Есть ли способ, возможно, изменить ваш код, чтобы текст в наложении сначала прокручивался, а когда он достигнет вершины, темная полупрозрачность исчезла (непрозрачность 0) - но таким образом, чтобы не блокировать видео Элементы управления (возможно получение отрицательного z-индекса после исчезновения) ..? invisionapp.com/studio

Smithy 26.04.2018 14:30

Похожи, но постепенно исчезают на выходе и по пути внутрь ..? Итак, текст должен быть одним наложением, которое сначала гаснет, а затем исчезает. После того, как он почти исчез, темный полупрозрачный оверлей также должен исчезнуть (и исчезнуть с z-index, чтобы пользователь мог нажать кнопку воспроизведения на видео). Извините за раздражение, пытаюсь сделать это несколько дней: D

Smithy 26.04.2018 14:49

Хорошо, посмотри еще раз. Это желаемый результат?

Red 26.04.2018 15:21

Отличная работа, большое вам спасибо! Извините за повторение - но возможно ли, что текст исчезает точно так же, как сейчас - но что полупрозрачный фон исчезает отдельно, поскольку текст медленно достигает вершины ..? Итак - точно так же, как здесь: invisionapp.com/studio Если это слишком много работы, я все равно приму ваш ответ - вы это заслужили, приятель

Smithy 26.04.2018 15:26

Хе-хе;), ладно. Проверьте это еще раз.

Red 26.04.2018 15:59

Не вижу разницы, но все равно даю вам награду :) Я постараюсь разобраться ... Может быть, я не понял, я бы хотел, чтобы текст постепенно исчезал вверху, а прозрачный фон исчезал и обратно после того, как текст пропал (так, как по ссылке invisionapp.com/studio). Не хочу больше раздражать: D Большое спасибо!

Smithy 26.04.2018 16:04

(Награжден, кажется, занимает 21 час)

Smithy 26.04.2018 16:04

Хорошо спасибо. Да, я думаю, что не совсем понимаю. Мой английский тоже не очень профессиональный.

Red 26.04.2018 16:10

знаете ли вы способ контролировать уменьшение поля до значения менее 100 пикселей, чтобы, возможно, избежать небольшого сбоя, который происходит со скрытым содержимым? Прокрутка вызывается много раз, поэтому возникают некоторые сбои, не знаю, можно ли управлять @red

Smithy 27.04.2018 14:06

В хроме глюков не вижу. Я предлагаю вам использовать код как ссылку. Но сделайте так, чтобы он делал то, что вы хотите. Будьте изобретательны и используйте свое воображение. Вы доберетесь туда в конце концов :)

Red 27.04.2018 15:11

Да, конечно, здесь младший: D глюк возникает при первом повороте мыши, текст "там будет кнопка при прокрутке вниз ...", немного перемещается. Поскольку у меня на странице больше контента, это более очевидно, особенно в IE и Firefox. Попробую найти какое-то решение ... Еще раз спасибо за ваше время и отличные навыки :)

Smithy 27.04.2018 15:18

Другие вопросы по теме