javascript - 为什么我用 jQuery 添加类后点击不起作用?

标签 javascript jquery css event-handling css-transitions

我在一些 div 上设置了点击。当我点击它们时,点击要么不起作用,要么不会立即起作用。

我有一个旋转木马。旋转木马具有由 CSS 类确定的背景图像。旋转木马中也有具有类的 div。我将淡入淡出类附加到内部 div 以提供交叉淡入淡出效果。这行得通。

如果我在页面加载后立即点击一个 div,一切正常。但是,在第一个轮播循环完成后,我必须在点击发生之前多次点击一个 div(如果发生的话)。

经过反复试验,我确定是“.addClass('fadein')”导致了问题。删除它会在第一次尝试时恢复我的点击。

这对我来说很奇怪,因为我没有将它添加到任何需要点击的地方。

这是我的代码片段。我的 HTML:

<div id="slider-wrapper" class="videos-set-1">
    <div id="ss-video-1" class="video-selection video-display-top"></div>
    <div id="ss-video-2" class="video-selection video-display-left"></div>
    <div id="ss-video-3" class="video-selection video-display-right"></div>
</div> 

我的CSS:

#slider-wrapper.fadein.videos-set-3 .video-display-top,
#slider-wrapper.fadein.videos-set-3 .video-display-left,
#slider-wrapper.fadein.videos-set-3 .video-display-right {
    visibility: hidden;
    opacity: 0;
    transition: visibility 0s 1s, opacity 1s linear;
}

还有我的 jQuery:

var activeIndex = 0;
var play;
var carouselItems = $('#slider-wrapper .video-selection');
var panelsTotal = carouselItems.length;
var videoGallery = $('.container-videos');
var animateScreensaver = true;

$(function() {
    function animateCarousel(n) {
        if(!animateScreensaver) return;
        if((n > activeIndex && n < panelsTotal) || (n < activeIndex && n >= 0)) {
            if(carouselItems.eq(n)) {
                $('#slider-wrapper').removeClass().addClass('videos-set-' + (n+1)).addClass('fadein');
            }
        }
        setTimeout(function () {
            $('#slider-wrapper').removeClass('fadein');
        }, 3000);
        activeIndex = n;
    }

    function playScreensaver() {
        animateScreensaver = true;
        play = setInterval(function() {
            if(activeIndex >= panelsTotal-1) {
                animateCarousel(0);
            } else {
                animateCarousel(activeIndex+1);
            }
        }, animateDuration);
    }

    function showScreensaver() {
        animateScreensaver = true;
        playScreensaver();
    }

    function playVideo(video) {
        // play video stuff
    }

    var autoStart = setTimeout(function() {
        playScreensaver();
    });

    $('.video-selection').on('click', function() {
        var thisVideo = $(this).attr('id');
        if(!animateScreensaver) {
            showVideoGallery(thisVideo);
        } else {
            animateScreensaver = false;
            playVideo(thisVideo);
        }
    });
})

我想保留交叉淡入淡出,但是,在尝试解决这个问题几个小时后,我准备放弃。我通读了其他 SO 答案,但它们似乎与我的问题不同,因为它们向点击处理程序添加了一个类,而我没有。

如果有人能给我指出正确的方向,我可以从那里开始。

谢谢。

最佳答案

我不确定我的解决方案能否解决您的问题。 但是根据我的经验,Jquery的click事件必须写在ready事件中。

例子:

//this is ready event
$(document).ready(function() {

  //add your click function here

});

关于javascript - 为什么我用 jQuery 添加类后点击不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732224/

相关文章:

html - CSS中first-line和first-child的特殊性?

javascript - 跨域 jquery 1.6.2 ajax 调用尝试从同一域调用

javascript - 主干触发事件变量

javascript - 事件触发的数量是否与 Jquery 中事件绑定(bind)的数量相关?

jquery - 将 text/div 旋转 90 度(静态)

javascript - 如何使用 jquery 应用条件逻辑

jquery - 背景尺寸 : Cover - Firefox issue

javascript - 仅使用 JavaScript 的 CORS

javascript - 单击一次解除右键单击绑定(bind)

css - 在多列、多行 <dl> 中堆叠 <dt> 和 <dt>