我在网页上使用了两个不同的脚本 - 一个是纯JS,另一个是jQuery。
JS脚本用于在移动视图中切换汉堡菜单。 hamb.onclick 会在点击汉堡包时显示菜单, menuL.onclick 会在点击菜单项时隐藏菜单。当jQuery脚本处于活动状态时,后者拒绝工作(当jQuery脚本被注释掉时,它会起作用。)
<script>
(function () {
function hasClass(elem, className) {
return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
}
function toggleClass(elem, className) {
var newClass = ' ' + elem.className.replace(/[\t\r\n]/g, ' ') + ' ';
if (hasClass(elem, className)) {
while (newClass.indexOf(' ' + className + ' ') >= 0) {
newClass = newClass.replace(' ' + className + ' ', ' ');
}
elem.className = newClass.replace(/^\s+|\s+$/g, '');
} else {
elem.className += ' ' + className;
}
}
var hamb = document.querySelector('.hamburger');
var menuL = document.querySelector('.menuList');
hamb.onclick = function () {
toggleClass(this, 'hamburgerOpen');
toggleClass(menuL, 'menuActive');
};
menuL.onclick = function () {
toggleClass(hamb, 'hamburgerOpen');
toggleClass(menuL, 'menuActive');
};
})();
</script>
jQuery用于平滑导航/滚动到页面的锚点:
<script>
function scrollNav() {
$('.menu a').click(function(){
//Toggle Class
$(".active").removeClass("active");
$(this).closest('li').addClass("active");
var theClass = $(this).attr("class");
$('.'+theClass).parent('li').addClass('active');
//Animate
$('html, body').stop().animate({
scrollTop: $( $(this).attr('href') ).offset().top - 160
}, 800);
return false;
});
$('.scrollTop a').scrollTop();
}
scrollNav();
</script>
据我所知,jQuery脚本劫持了JS脚本的onclick事件,因为它们在同一个父元素上工作:&#34; .menu a&#34;和&#34; menuList&#34; (这是&#34; ul&#34;里面&#34; .menu&#34;)。
如何让两个脚本一起工作?我是初学者,我的JavaScript技能仍然很弱。
答案 0 :(得分:0)
哦,来吧,有90%的时间我在这里发帖,因为我真的需要帮助 - 我没有得到任何帮助。图...
答案很简单(但我整整一夜都在尝试其他剧本)。如果第二个脚本高举事件,只需将该函数移动到第二个脚本并在那里运行。
有效!