Alexanderverd
@Alexanderverd
Человек разных интересов

Как подправить JavaScript?

Использую такое решение для анимации элементов:
$(window).scroll(function() {	
$('#example-14').each(function(){
var imagePos = $(this).offset().top;
var topOfWindow = $(window).scrollTop();
if (imagePos < topOfWindow+600) {
$('.device-arrow14').addClass("slideUp");
}
});	
});

#example-14{
text-align: center;
}
#example-14 .device-arrow14{
width: 100%;
visibility: hidden;
margin: 0 auto;
}
#example-14{
text-align: center;
}
.slideUp{
	animation-name: slideUp;
	-webkit-animation-name: slideUp;	

	animation-duration: 1s;	
	-webkit-animation-duration: 1s;

	animation-timing-function: ease;	
	-webkit-animation-timing-function: ease;

	visibility: visible !important;			
}

@keyframes slideUp {
	0% {
		transform: translateY(100%);
	}
	50%{
		transform: translateY(-8%);
	}
	65%{
		transform: translateY(4%);
	}
	80%{
		transform: translateY(-4%);
	}
	95%{
		transform: translateY(2%);
	}			
	100% {
		transform: translateY(0%);
	}	
}

@-webkit-keyframes slideUp {
	0% {
		-webkit-transform: translateY(100%);
	}
	50%{
		-webkit-transform: translateY(-8%);
	}
	65%{
		-webkit-transform: translateY(4%);
	}
	80%{
		-webkit-transform: translateY(-4%);
	}
	95%{
		-webkit-transform: translateY(2%);
	}			
	100% {
		-webkit-transform: translateY(0%);
	}	
}

<section id="example-4">
<div class="device-arrow4">
Анимируемый элемент
</div>
</section>

Анимация происходит в момент когда страница скроллится вниз на 600 пикселей, до этого анимируемый элемент скрыт. Нужно же сделать чтоб скрипт срабатывал сразу после загрузки страницы, а не в момент скролла, но так же был скрыт до начала анимации (привел пример 1 анимации, всего будет 4, каждая из последующих проигрывается с задержкой).
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
Alexanderverd
@Alexanderverd Автор вопроса
Человек разных интересов
$( document ).ready(function() {
    здесь код, который сработает когда страница загружена:
$('.device-arrow14').addClass("slideUp");
});

Для вопроса сформулированного мной, решение такое. Решение предложил Максим Тимофеев.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@chirskiy_mixail
Очень давно занимаюсь версткой, имею огромный опыт
По хорошему вот этот кусок
$('#example-14').each(function(){
var imagePos = $(this).offset().top;
var topOfWindow = $(window).scrollTop();
if (imagePos < topOfWindow+600) {
$('.device-arrow14').addClass("slideUp");
}
});

вынести в отдельную ф-цию, к примеру так:
var topOfWindow = window.scrollY;

function myScroll() {
$('#example-14').each(function(){
var imagePos = $(this).offset().top;
topOfWindow = $(window).scrollTop();
if (imagePos < topOfWindow+600) {
$('.device-arrow14').addClass("slideUp");
}
});
}

далее вызывать ее

myScroll();

$(window).scroll(function() {
myScroll();
});


Чтобы узнать текущую позицию без window.scroll(), воспользуйтесь глобальным объектом window, если я не ошибаюсь, там должен быть property scrollY, тоесть window.scrollY вернет вам ваш offset который у вас, при открытии браузера, или же если вы скролили страницу до этого и остановились не на 0 позиции, он вернет это число.
Проще говоря, ваш код начинает работать после события window.scroll, а не после загрузки страницы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы