javascript - 由于类分配延迟,onclick 函数需要双击

标签 javascript jquery css

标题说明了一切。我得到了 LI 元素的列表。单击导航时,事件 li 会获得“当前”类,但这需要一秒钟。 但是当我使用我的代码时,我需要点击导航然后 li 打开,我需要再次点击以注册代码。 视频的位置不能硬编码!它需要是动态的。

(function($) {
$(document).ready(function(){
  $('video').each(function() {
      $(this).get(0).pause();
  });
  $('.slides').children('li').addClass('test');
});   

$(document).on('click','span',function(){

    if ( $('li').hasClass('current') ) {
      $('li.test').find('video').each(function() {
          $(this).get(0).pause();
      });  
      $('li.current.test').find('video').each(function() {
          $(this).get(0).play();
      }); 

    } 
});  
})(jQuery);

http://codepen.io/hennysmafter/pen/aNrVKG?editors=1010

不幸的是,我将在接下来的一个小时左右有空,但之后会回来!感谢大家的帮助。

最佳答案

我找到了导致问题的原因:

单击跨度时,您正在播放其父级具有“.current”类的元素。

但是当你点击一个元素时,它会得到“.show”类,而之前选择的 span 会得到“.hide”类并保持“.current”类,直到动画结束(然后是“.hide”类)。 show"& ".hide"类被删除,".current"类切换元素)。

一种解决方案是像这样更改选择器:

$(document).on('click','span',function(){
      console.log('the if is running');
      $('.current, .hide').find('video').each(function() {
          $(this).get(0).pause();
      });  
      $('.show').find('video').each(function() {
          $(this).get(0).play();
      });

});

通过这样做,无论何时点击一个 span,您都会暂停其父级具有“.hide”类的元素,并播放其父级具有“.show”类的元素。

另一个解决方案应该是在应用类时创建一个事件(参见 jQuery - Fire event if CSS class changed)。

关于javascript - 由于类分配延迟,onclick 函数需要双击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37282099/

相关文章:

javascript - 对 Canvas 文本使用自定义字体

javascript - 表的下拉选择

jquery - 如何选择具有特定 href 的所有 anchor ?

jquery - 使用 jQuery Ajax 调用下载并保存文件

javascript - 如何在 jQuery Mobile 中的按钮上添加渐变悬停

javascript - 在 xmlHttpRequest 提交中暂停 10 秒

javascript - Vanilla HTML + JS - 动态插值?

javascript - jQuery - 左边距减去 div 宽度的一半

html - 如何将这四个 div 元素与图像并排对齐

html - 图片链接不适用于移动设备