Изучаю JavaScript, решил сделать кнопку "наверх".
Написал данный код:
'use strict';
/* begin begin Back to Top button */
(function() {
function trackScroll() {
var scrolled = window.pageYOffset;
var coords = document.documentElement.clientHeight;
if (scrolled > coords) {
goTopBtn.classList.add('back_to_top-show');
}
if (scrolled < coords) {
goTopBtn.classList.remove('back_to_top-show');
}
}
function backToTop() {
if (window.pageYOffset > 0) {
window.scrollBy(0, -80);
setTimeout(backToTop, 0);
}
}
var goTopBtn = document.querySelector('.back_to_top');
window.addEventListener('scroll', trackScroll);
goTopBtn.addEventListener('click', backToTop);
})();
/* end begin Back to Top button */
.matrix {
width: 400px;
margin: auto;
text-align: justify;
}
/* begin begin Back to Top button */
.back_to_top {
position: fixed;
bottom: 80px;
right: 40px;
z-index: 9999;
width: 30px;
height: 30px;
text-align: center;
line-height: 30px;
background: #f5f5f5;
color: #444;
cursor: pointer;
border-radius: 2px;
display: none;
}
.back_to_top:hover {
background: #e9ebec;
}
.back_to_top-show {
display: block;
}
/* end begin Back to Top button */
<div class="matrix">
<script>
for (var i = 0; i < 4000; i++) document.writeln(i)
</script>
</div>
<!-- begin Back to Top button -->
<a class="back_to_top" title="Наверх">↑</a>
<!-- end Back to Top button -->
Анимацию решил сделать, с помощью метода setTimeoutи рекурсии.
Прошу дать оценку моему коду.
Также задам вопросы:
1). Я обернул js код в анонимную функцию, это делается для того чтобы переменные не попадали в глобальную область видимости, прав ли я?
2). В функцииfunction backToTop(){...} нужно писать else{ return; }? Я поясню, мне понятно, что будет работать аналогично, но возможно по правилам "хорошего тона" нужно писать, вот и решил спросить.
3). 'use strict'; Если весь код переводим в "современный стандарт", то достаточно в самом верху документа один раз написать 'use strict';, прав ли я?
Поясню, в одной js библиотеке,в документе я видел много раз написанный 'use strict';, видимо это делалось потому что только часть кода была переведена в "современный стандарт", так ли это? Например если в моем коде 'use strict'; убрать с начала документа и написать в анонимной функции, перед основным кодом, то в "современный стандарт" будет переведен только тот код, что внутри анонимной функции, верно?
requestAnimationFrameтогда – andreymal Apr 03 '17 at 16:49