【问题标题】:Owl Carousel conflicts with my javascriptOwl Carousel 与我的 javascript 冲突
【发布时间】: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


【解决方案1】:

我找到了答案!

您必须在轮播中添加“owl-carousel”类。

<div>
<div class="container"> <!-- Owl Carousel 1 -->
    <div class="row">
        <div class="owl-carousel 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 owl-carousel-two">
            <div> <!-- content --> </div>
            <div> <!-- content --> </div>
        </div>
    </div>  
</div>

AND我犯了两次启动相同功能的错误。

$(function(){
    fullHeight();
    sliderMain();
    centerBlock();
    responseHeight();
    mobileMenuOutsideClick();
    offcanvasMenu();
    burgerMenu();
    toggleBtnColor();
    contentWayPoint();
    oneCarousel();
});

$(function(){
    fullHeight();
    sliderMain();
    centerBlock();
    responseHeight();
    mobileMenuOutsideClick();
    offcanvasMenu();
    burgerMenu();
    toggleBtnColor();
    contentWayPoint();
    twoCarousel();
});

你需要融合它们:

$(function(){
    fullHeight();
    sliderMain();
    centerBlock();
    responseHeight();
    mobileMenuOutsideClick();
    offcanvasMenu();
    burgerMenu();
    toggleBtnColor();
    contentWayPoint();
    oneCarousel();
    twoCarousel();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多