我正在尝试获取锚点链接以打开特定页面上的标签。
当我在选项卡所在的页面上,然后单击锚点链接时,它会正确滚动到选项卡并打开它 - 但是,如果我在与选项卡打开的其他页面上,锚链接仅转到该页面,它不会打开选项卡。
网址:http://elkodowntown.wpengine.com/
Anchor链接位于导航栏中我们的会员菜单下。
JS:
jQuery(function($) {
$('.menu-item-179 a').on('click', function(event){
tabScroll('.et_pb_tab_0');
return false;
});
$('.menu-item-180 a').on('click', function(event){
tabScroll('.et_pb_tab_1');
return false;
});
$('.menu-item-181 a').on('click', function(event){
tabScroll('.et_pb_tab_2');
return false;
});
$('.menu-item-182 a').on('click', function(event){
tabScroll('.et_pb_tab_3');
return false;
});
$('.menu-item-183 a').on('click', function(event){
tabScroll('.et_pb_tab_4');
return false;
});
function tabscroll(target) {
$("html, body").animate({ scrollTop: $('#member-tabs').offset().top }, 1000);
setTimeout($('#member-tabs' + target + ' a').click(), 2000 );
}
$(function hash() {
var hash = window.location.hash.replace('#', "");
if (hash == '#shop') { tabscroll('.et_pb_tab_1'); }
if (hash == '#service') { tabscroll('.et_pb_tab_0'); }
if (hash == '#eat-drink') { tabscroll('.et_pb_tab_2'); }
if (hash == '#arts-entertainment') { tabscroll('.et_pb_tab_3'); }
if (hash == '#stay') { tabscroll('.et_pb_tab_4'); }
});
});
锚点链接HTML:
<ul class="sub-menu">
<li id="menu-item-179" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-179"><a href="/our-members#shop">Shop</a></li>
<li id="menu-item-180" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-180"><a href="/our-members#service">Service</a></li>
<li id="menu-item-181" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-181"><a href="/our-members#eat-drink">Eat & Drink</a></li>
<li id="menu-item-182" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-182"><a href="/our-members#arts-entertainment">Arts & Entertainment</a></li>
<li id="menu-item-183" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-183"><a href="/our-members#stay">Stay</a></li>
</ul>
标签HTML:
<div id="member-tabs" class="et_pb_module et_pb_tabs et_pb_tabs_0 et_slide_transition_to_3 et_slide_transition_to_0">
<ul class="et_pb_tabs_controls clearfix">
<li class="et_pb_tab_0 et_pb_tab_active"><a href="#">Shop</a></li><li class="et_pb_tab_1"><a href="#">Service</a></li><li class="et_pb_tab_2"><a href="#">Eat & Drink</a></li><li class="et_pb_tab_3"><a href="#">Arts & Entertainment</a></li><li class="et_pb_tab_4"><a href="#">Stay</a></li>
</ul>
此处<a name="#shop">
正在调用锚链接(#shop,#service等)(直接在标签HTML下):
<div class="et_pb_tab clearfix et_pb_active_content et_pb_tab_0 et-pb-active-slide" style="z-index: 1; display: block; opacity: 1;">
<a name="shop"></a><!--- tab content here --->
</div>
我确信有更好的方法来组织我的JS。
感谢任何帮助!
答案 0 :(得分:0)
查看代码一段时间后,问题终于明白了。您现在将每个点击处理程序包装在他们自己的jQuery函数中:
jQuery(function($) {
$('.menu-item-183 a').on('click', function(event){
tabScroll();
return false;
});
function tabScroll(){
$('#member-tabs .et_pb_tab_4 a').click();
$("html, body").animate({ scrollTop: $('#member-tabs').offset().top }, 1000);
}
});
jQuery(function($) { ...
在每个上下文中,tabscroll()
仅具有相对于外部jQuery函数的范围。也就是说,在上述情况下,只有 menu-item-183
才能访问特定的 tabscroll()
函数。
您稍后尝试引用该范围之外的tabscroll()
函数:
$(function hash() {
var hash = window.location.hash.replace('#', "");
if (hash == '#shop') { tabscroll(); }
if (hash == '#service') { tabscroll(); }
if (hash == '#eat-drink') { tabscroll(); }
if (hash == '#arts-entertainment') { tabscroll(); }
if (hash == '#stay') { tabscroll(); }
});
当这个块读取时,所有条件都试图做同样的事情(没有给定参数调用tabscroll()
),条件基本上可以写成:
if (hash == '#shop' || hash == '#service' || ... ) {
tabscroll();
}
但您需要tabscroll
功能重定向到与hash
相同的不同位置,这意味着您必须手动将它们分开:
if (hash == '#shop') { tabscroll('.et_pb_tab_1'); }
if (hash == '#service') { tabscroll('.et_pb_tab_0'); }
if (hash == '#eat-drink') { tabscroll('.et_pb_tab_2'); }
if (hash == '#arts-entertainment') { tabscroll('.et_pb_tab_3'); }
if (hash == '#stay') { tabscroll('.et_pb_tab_4'); }
然后只需更改tabscroll功能即可:
function tabscroll(target) {
$('#member-tabs' + target + ' a').click();
$("html, body").animate({ scrollTop: $('#member-tabs').offset().top }, 1000);
}
最后一步是确保您的条件可以访问此新 tabscroll()
功能。使用您当前的代码结构,它应位于$(function hash() {});
最终你应该重构你的代码,以便每次点击链接到这个新的tabscroll()
函数,但这应该足以解决现在的问题:)
希望这有帮助! :)