У меня есть видео (в настоящее время это встроенное видео 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>(«Повторяющийся» ответ не имеет аналогичного видео-примера)
там ничего с видео ...

Просто попытайтесь понять, что я сделал на скрипке ниже. Это не так сложно, как могло бы показаться.
В основном вы просто получаете 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
Похожи, но постепенно исчезают на выходе и по пути внутрь ..? Итак, текст должен быть одним наложением, которое сначала гаснет, а затем исчезает. После того, как он почти исчез, темный полупрозрачный оверлей также должен исчезнуть (и исчезнуть с z-index, чтобы пользователь мог нажать кнопку воспроизведения на видео). Извините за раздражение, пытаюсь сделать это несколько дней: D
Хорошо, посмотри еще раз. Это желаемый результат?
Отличная работа, большое вам спасибо! Извините за повторение - но возможно ли, что текст исчезает точно так же, как сейчас - но что полупрозрачный фон исчезает отдельно, поскольку текст медленно достигает вершины ..? Итак - точно так же, как здесь: invisionapp.com/studio Если это слишком много работы, я все равно приму ваш ответ - вы это заслужили, приятель
Хе-хе;), ладно. Проверьте это еще раз.
Не вижу разницы, но все равно даю вам награду :) Я постараюсь разобраться ... Может быть, я не понял, я бы хотел, чтобы текст постепенно исчезал вверху, а прозрачный фон исчезал и обратно после того, как текст пропал (так, как по ссылке invisionapp.com/studio). Не хочу больше раздражать: D Большое спасибо!
(Награжден, кажется, занимает 21 час)
Хорошо спасибо. Да, я думаю, что не совсем понимаю. Мой английский тоже не очень профессиональный.
знаете ли вы способ контролировать уменьшение поля до значения менее 100 пикселей, чтобы, возможно, избежать небольшого сбоя, который происходит со скрытым содержимым? Прокрутка вызывается много раз, поэтому возникают некоторые сбои, не знаю, можно ли управлять @red
В хроме глюков не вижу. Я предлагаю вам использовать код как ссылку. Но сделайте так, чтобы он делал то, что вы хотите. Будьте изобретательны и используйте свое воображение. Вы доберетесь туда в конце концов :)
Да, конечно, здесь младший: D глюк возникает при первом повороте мыши, текст "там будет кнопка при прокрутке вниз ...", немного перемещается. Поскольку у меня на странице больше контента, это более очевидно, особенно в IE и Firefox. Попробую найти какое-то решение ... Еще раз спасибо за ваше время и отличные навыки :)
Возможный дубликат Событие триггера, когда пользователь переходит к определенному элементу - с помощью jQuery