У меня есть две написанные функции, которые отлично работают. Одна функция добавит атрибут видео HTML autoplay
в элемент видео DOM, если пользователь находится в определенном разделе на странице. Другая функция будет скользить в некоторых элементах с хорошим переходом.Является ли это правильным способом повторного использования функции JS?
Но недостатком является то, что он будет работать для одного элемента внутри страницы, но я хотел бы, чтобы он работал и с другими элементами.
Вот одна функция, то один, что воспроизведение видео на свитке:
playOnScroll: function() {
var player = $('.browser video');
var hasReached = false;
function isInView(elem){
return $(elem).offset().top - $(window).scrollTop() < $(elem).height();
}
$(window).scroll(function() {
var section = $('#user-experience');
// If section exists
if (section.length) {
if (isInView(section) && !hasReached) {
// console.log('play video');
hasReached = true;
player.get(0).play();
}
}
});
}
На данный момент функция делает только работу, если раздел с идентификатором #user-experience
в поле зрения, но было бы здорово, если бы Я могу использовать эту функцию для большего количества разделов.
На момент написания статьи я собираюсь изменить целевой раздел на имя класса, и если раздел имеет этот класс, он выполнит свою работу. Или есть лучший способ сделать это?
Если я взгляну на мою вторую функции, которые я упоминал ранее, что будет обрабатывать некоторую интересную поступающую анимации на свитке, я не знаю, как повторно использовать эту функцию для нескольких селекторов элементов:
moduleShift: function() {
var root = this;
var el = $('.entry figure');
var offset = 0.8;
root.isVisible(el, offset);
$(window).scroll(function() {
// Get the offset of the window from the top of page
var windowPos = $(this).scrollTop();
setTimeout(function(){
root.isVisible(el, offset);
}, 1000);
});
},
isVisible: function(el, offset) {
el.each(function() {
var elHeight = $(this).outerHeight();
var offsetTop = $(this).offset().top;
var offsetBottom = offsetTop + elHeight;
if (offsetTop <= $(window).scrollTop() + $(window).height()*offset) {
$(this).addClass('moduleShift');
};
});
}
То же самое решение выше должно быть применимо и к этой функции, но, возможно, такой же вопрос, как и для первой функции, есть ли лучший способ сделать это?
Буду признателен за советы. Заранее спасибо. Если у вас остались вопросы, сообщите мне.
Ну, может быть, попробуйте передать переменные функциям вместо определения селекторов внутри них? – Jan
Возможно, имеет смысл использовать функцию для проверки того, какой раздел в данный момент находится в поле зрения, а затем проверить, содержит ли этот раздел видео для автоматического воспроизведения ... – CBroe