【发布时间】:2017-10-26 14:01:55
【问题描述】:
每当我在 1 个站点上有 2 个 Owl-Carousel's 时,我的汉堡菜单就不再起作用了。
我使用flew 作为我网站的基础。它使用 jQuery v2.1.4。
标题 HTML:
<header class="navbar navbar-default navbar-custom navbar-fixed-top affix" role="banner">
<div class="container">
<div class="header-inner">
<nav role="navigation">
<ul>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
<li><a href="#">Test</a></li>
</ul>
</nav>
</div>
</div>
猫头鹰轮播 HTML:
<div>
<div class="container"> <!-- Owl Carousel 1 -->
<div class="row">
<div class="owl-carousel-one">
<div> <!-- content --> </div>
<div> <!-- content --> </div>
</div>
</div>
</div>
<div class="container"> <!-- Owl Carousel 2 -->
<div class="row">
<div class="owl-carousel-two">
<div> <!-- content --> </div>
<div> <!-- content --> </div>
</div>
</div>
</div>
</div>
汉堡菜单/页眉JS:
;(function () {
var mobileMenuOutsideClick = function() {
$(document).click(function (e) {
var container = $("#tsj-offcanvas, .js-tsj-nav-toggle");
if (!container.is(e.target) && container.has(e.target).length === 0) {
if ( $('body').hasClass('offcanvas-visible') ) {
$('body').removeClass('offcanvas-visible');
$('.js-tsj-nav-toggle').removeClass('active');
}
}
});
};
var offcanvasMenu = function() {
$('body').prepend('<div id="tsj-offcanvas" />');
$('#tsj-offcanvas').prepend('<ul id="tsj-side-links">');
$('body').prepend('<a href="#" class="js-tsj-nav-toggle tsj-nav-toggle"><i></i></a>');
$('#tsj-offcanvas').append($('#tsj-header nav').clone());
};
var burgerMenu = function() {
$('body').on('click', '.js-tsj-nav-toggle', function(event){
var $this = $(this);
$('body').toggleClass('tsj-overflow offcanvas-visible');
$this.toggleClass('active');
event.preventDefault();
});
$(window).resize(function() {
if ( $('body').hasClass('offcanvas-visible') ) {
$('body').removeClass('offcanvas-visible');
$('.js-tsj-nav-toggle').removeClass('active');
}
});
$(window).scroll(function(){
if ( $('body').hasClass('offcanvas-visible') ) {
$('body').removeClass('offcanvas-visible');
$('.js-tsj-nav-toggle').removeClass('active');
}
});
};
}());
$(document).ready(function(){
$('a[href^="#"]').on('click',function (e) {
e.preventDefault();
var target = this.hash;
var $target = $(target);
$('html, body').stop().animate({
'scrollTop': $target.offset().top
}, 900, 'swing', function () {
window.location.hash = target;
});
});
});
猫头鹰轮播(与汉堡菜单/标题功能相同):
;(function () {
var oneCarousel = function(){
var owl = $('.owl-carousel-one');
owl.owlCarousel({
loop:true,
margin:0,
autoHeight:true,
smartSpeed: 500,
responsiveClass:true,
responsive:{
0:{
items:1,
},
1000:{
items:1,
nav:false,
dots: true,
}
}
});
};
$(function(){
fullHeight();
sliderMain();
centerBlock();
responseHeight();
mobileMenuOutsideClick();
offcanvasMenu();
burgerMenu();
toggleBtnColor();
contentWayPoint();
oneCarousel();
});
var twoCarousel = function(){
var owl = $('.owl-carousel-two');
owl.owlCarousel({
loop:true,
margin:0,
autoHeight:false,
smartSpeed: 500,
responsiveClass:true,
responsive:{
0:{
items:1,
},
1000:{
items:1,
nav:false,
dots: true,
}
}
});
};
$(function(){
fullHeight();
sliderMain();
centerBlock();
responseHeight();
mobileMenuOutsideClick();
offcanvasMenu();
burgerMenu();
toggleBtnColor();
contentWayPoint();
twoCarousel();
});
}());
这也是我点击汉堡菜单时收到的错误消息:
main.js:249 Uncaught TypeError: Cannot read property 'top' of undefined
at HTMLAnchorElement.<anonymous> (main.js:249)
at HTMLAnchorElement.dispatch (jquery.min.js:3)
at HTMLAnchorElement.r.handle (jquery.min.js:3)
编辑:每当我删除 1 个轮播(不管是哪一个)时,我的汉堡菜单都会再次起作用。
【问题讨论】:
-
您发布的代码中的哪一行是第 249 行?
-
我猜
this.hash没有引用有效的 DOM 元素,这两行实际上是在引用“nothing”:var target = this.hash; var $target = $(target);。我建议之后立即添加if ( ! $target.length ) { console.log(target + ' does not exist!'); return;},看看这对你有什么作用。 -
可能是因为您在重复的
$(function(){函数中启动了两次某些函数?比如burgerMenu();? -
@cale_b 第 249 行 = 'scrollTop': $target.offset().top
-
@cale_b if ( !$target.length ) { console.log(target + ' 不存在!'); return;} 没用
标签: javascript jquery css twitter-bootstrap-3 owl-carousel