![](/img/trans.png)
[英]How do I add a class to the body using jQuery, scrollTop, and toggleClass
[英]How do I trigger javascript scrollTop() before displaying Body?
我正在嘗試渲染僅向下滾動超過650px后才顯示的導航欄組件。 我的問題是,當我刷新頁面時,導航欄已經顯示。 僅當我向下滾動頁面1px后,一切都開始工作。
//application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Coop Interface</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<script src="https://kit.fontawesome.com/062b3abfa0.js"></script>
</head>
<body>
<%= yield %>
</body>
</html>
//navbar.js
$(document).scroll(function () {
var y = $(this).scrollTop();
if (y > 650) {
$('.secondary_navbar-coop').fadeIn();
} else {
$('.secondary_navbar-coop').fadeOut();
}
});
//_navbar.scss
.secondary_navbar-coop {
z-index: 1;
position: fixed;
display: flex;
top: 0;
width: 100vw;
height: 108px;
align-items: baseline;
justify-content: space-between;
background: #F7FAFB;
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.10 );
font-family: Roboto;
font-style: normal;
font-weight: 500;
font-size: 14px;
line-height: 16px;
padding-left: 60px;
padding-right: 60px;
padding-top: 8px;
}
我希望在顯示正文之前會觸發javascript,因此我不會在刷新時看到導航欄,因為腳本是放在正文之前的,這正是我期望的。 有什么建議嗎? 謝謝!
您需要在init上調用相同的代碼:
$(function() {
$(document).scroll(function () {
var y = $(this).scrollT op();
if (y > 650) {
$('.secondary_navbar-coop').fadeIn();
} else {
$('.secondary_navbar-coop').fadeOut();
}
}).scroll();
});
如果在關閉</body>
之后包含了navbar.js
則不需要包裝$(function() { });
您只需要一個腳本就可以了。
當dom准備好確定是否應顯示導航欄時,可以調用函數處理程序。
默認情況下,您必須使用display: none
隱藏導航欄display: none
可以防止在加載文檔時出現導航欄意外滑動
//navbar.js
function scrollHandler() {
var y = $(window).scrollTop();
var $navBar = $('.secondary_navbar-coop');
if (y > 650) {
if ($navBar.is(':visible') {
$navBar.css({opacity: 0, display: 'flex'}).animate({opacity: 1}, 400);
}
} else {
$navBar.fadeOut();
}
}
$(function() {
$(document).scroll(scrollHandler);
// scrollHandler will be called when the dom is ready
scrollHandler();
});
//_navbar.scss
.secondary_navbar-coop {
display: none;
...
}
通過使用事件監聽器來檢測所有滾動事件的最簡單方法如下。
window.addEventListener('scroll', function(){
var y = $(this).scrollTop();
if (y > 650) {
$('.secondary_navbar-coop').fadeIn();
} else {
$('.secondary_navbar-coop').fadeOut();
}
}, true);
將此添加到您的主JS文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.