【问题标题】:jQuery fadein and out is not working properly in Google ChromejQuery 淡入和淡出在 Google Chrome 中无法正常工作
【发布时间】:2012-03-09 06:37:55
【问题描述】:

我在使用 jQuery 制作的简单幻灯片时遇到问题。 该脚本在除 Google Chrome 之外的所有其他浏览器中都能正常工作。你可以找到直播网站here

这有两点不妥:

  1. 幻灯片自动启动,但在第二张幻灯片后停止。
  2. 如果您单击幻灯片指示器 (....),有时会显示该幻灯片的背景图像(通过 CSS 应用),有时会保持隐藏状态。

最重要的是,我得到了这个错误:

event.layerX 和 event.layerY 在 WebKit 中被破坏和弃用。它们将在不久的将来从引擎中移除。

这是我正在使用的 JavaScript:

function nextSlide() {
    var visibleSlide = $('#slider li:visible');
    var currentSlide = $(visibleSlide).index() + 1;
    var slideCount = $('#slider li').size();
    var nextSlide = (currentSlide == slideCount) ? 1 : currentSlide + 1;

    $('#slider_indicator a').removeClass('active');
    $(visibleSlide).fadeOut('fast', function() {
        $('#slider li:nth-child(' + nextSlide + ')').fadeIn('fast');
        $('#slider_indicator  li:nth-child(' + nextSlide + ') a').addClass('active');
    });
}

autoslide = setTimeout("nextSlide()", 6000);

$(function() {
    $('#slider_indicator a').bind('click', function(e) {
        clearTimeout(autoslide);
        $('#slider_indicator a').removeClass('active');
        $(this).addClass('active');
        var slide_number = $(this).parent().index() + 1;
        $('#slider li:visible').fadeOut('fast', function() {
            $('#slider li:nth-child(' + slide_number + ')').fadeIn('fast');
        });
        e.preventDefault();
    })
    $('#selection .scrollable .items a').live('click', function(e) {
        var self = $(this);
        $.ajax({
            url: $(self).attr('href'),
            type: 'GET',
            success: function(body) {
                var count = $('#selection .scrollable .items a').length - 1;
                count = (count == 1) ? count + ' Ribbon' : count + ' Ribbons';
                $(self).parent('li').fadeOut('fast', function() {
                    $('#result li a[rel="' + $(self).attr('rel') + '"]').removeClass('added');
                    $(this).remove();
                    $('#selection #header #count').text(count);
                })
            }
        })
        e.preventDefault();
    })
})​

非常感谢任何帮助。

【问题讨论】:

标签: javascript jquery google-chrome


【解决方案1】:

没有jQuery经验,但我认为你的问题出现在这一行:

$('#slider li:nth-child(' + nextSlide + ')').fadeIn('fast');

应该是:

$('#slider li:nth-child(" + nextSlide + ")').fadeIn('fast');

虽然可能只是我的电脑,但我没有发现问题。

【讨论】:

    【解决方案2】:

    正如我在评论中回答的那样,现在可以使用,但在单击事件中它不起作用,因此您可以简单地使用

    $('#slider_indicator a').bind('click', function(e){
        clearInterval(autoslide);
        autoslide=setInterval("nextslide", 6000);
    });
    

    但要设置当前索引,您可以使用 nextslide 变量。

    【讨论】:

      【解决方案3】:

      我正在尝试找出问题所在以及为什么它不起作用但是:

      var currentSlide = $(visibleSlide).index() + 1;
      

      你不需要在 jQuery 中包装 visibleSlide,因为它已经是一个 jQuery 对象。

      slideCount = $('#slider li').size();
      

      通常在这种情况下使用length 而不是size()

      var nextSlide = (currentSlide == slideCount) ? 1 : currentSlide + 1;
      

      没有尝试过,它可能会起作用,但我认为这可能不是一个很好的解决方案。

      $('#slider_indicator  li:nth-child(' + nextSlide + ') a').addClass('active');
      

      看起来很奇怪,是缺少引号还是空格太多,不知道,看起来好像行不通,但我可能错了。也许这就是您的问题所在。

      autoslide = setTimeout("nextSlide()", 6000);
      

      我想你在那儿错过了val

      $('#selection .scrollable .items a').live('click', function (e)
      

      您需要所有这些选择器吗?另外,我认为live() 已被弃用,而支持on()

      var count = $('#selection .scrollable .items a').length - 1;
      count = (count == 1) ? count + ' Ribbon' : count + ' Ribbons';
      

      这只是给我同样的感觉,它有时可能会起作用。我不明白你为什么定义 count 然后用奇怪的三元运算覆盖它。我觉得可能有更好的方法来做到这一点。

      【讨论】:

        【解决方案4】:

        我没有看到你在任何地方声明 var autoslide

        我认为你想要setInterval,而不是setTimeout

        【讨论】:

        • 变量自动滑动在它的全局范围内。
        猜你喜欢
        • 2014-06-05
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 1970-01-01
        相关资源
        最近更新 更多