我正在尝试使用jQuery
来更新将用户带回页面顶部的锚标记。如果页面上的内容大于页面本身的height
,则会显示该链接。如果内容不大于页面本身,则链接将不会显示。
内容元素的height
取决于我nav
中的链接返回的内容。因此,在链接点击时,我得到内容元素的高度,并确定是否需要显示"返回顶部"链接。
虽然有效,但问题是你必须点击nav
标签两次才能生效。
jQuery代码:
$(document).ready(function () {
$("a[data-toggle]").click(function() {
var pct = Math.round(( $("div.tab-content").outerHeight(true) / $(window).height() ) * 100);
if (pct > 90) {
$("#top-link").text("Back to top");
} else {
$("#top-link").empty();
}
});
});
导航代码:
<header>
<nav>
<ul class="nav nav-tabs">
<li><a data-toggle="tab" href="#configs" >Configs</a></li>
<li><a data-toggle="tab" href="#error-log" >Error Log</a></li>
<li><a data-toggle="tab" href="#user-log" >User Log</a></li>
</ul>
</nav>
</header>
内容元素:
<main>
<div class="tab-content">
This area is populated with data depending on the nav link clicked.
</div>
</main>
&#34;返回顶部&#34;链接:
<a id="top-link" href="#top"></a>
提前感谢您提供帮助以解决此问题,以便第一次点击时即可正常运行。
答案 0 :(得分:1)
嗯,问题在于您的计算会在呈现内容之前发生,因此在if condition
内的click event
中输入了错误的值。我的建议是,您不需要click event
来设置/清除back-to-top
文字。相反,您可以使用bootstrap tab
的 shown.bs.tab
事件,并在显示tab
后执行操作。以下是您的JS
更新代码。
$(document).ready(function() {
setInterval(updateClock, 1000);
});
$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function(e) {
var pct = Math.round(($("div.tab-content").outerHeight(true) / $(window).height()) * 100);
if (pct > 90) {
$("#top-link").text("Back to top");
} else {
$("#top-link").empty();
}
});
<强> 强>
作为建议的一部分,我建议您不要设置和清除文字,而只需将.hide
和.show
用于{{1} }元素,如#top-link
和$("#top-link").show()
。
答案 1 :(得分:0)
@ L-Train你有谷歌浏览器,你可以检查,以确保你的代码没有任何错误?您可以通过右键单击鼠标来执行检查元素吗?