【问题标题】:jQuery Cycle - changing options dynamicallyjQuery Cycle - 动态改变选项
【发布时间】:2013-04-25 03:54:55
【问题描述】:

问题:

如何通过鼠标在 HTML 元素上的交互异步更改 jQuery Cycle 的选项?


jsFiddle

Here's a working example.意图说明请参考cmets


进行的研究:

cycle 的作者This tweet 透露,可以异步修改cycle 的选项。

我在后续推文中问他是否可以解释这个主题,他说(释义)“继续潜伏”。

在查看了cycle的源代码后,我发现他并没有说谎。 cycle.opts 确实存在,还有一个 debug 函数显然有一些值得提及的用途。但是,我对如何利用这些功能知之甚少。

我可以使用cycle.opts 返回对象的状态,但这是“...然后更改您需要的内容”的方面,我无法弄清楚。我已经查看了Options Reference page,其他选项的默认设置似乎不会干扰。

【问题讨论】:

  • 我发现这非常有帮助。 JS Fiddle 反映了@bububaba 的回答不是吗?不应该接受吗?

标签: jquery jquery-plugins jquery-cycle


【解决方案1】:

好吧,除非我遗漏了什么,否则您根本不会更改代码中的选项。试试这个:

$('#foo').mouseover(function(){
    var changedOpts = $('.shuffle').data('cycle.opts')
    changedOpts.speed = 0;
    $('.shuffle').data('cycle.opts', changedOpts);
});

【讨论】:

  • 我觉得这绝对是在正确的轨道上。给.data 更多的论点对我来说应该是显而易见的。我认为在瞬时过渡之前,还有更多的选项需要配置。谢谢!
  • 查看“选项参考”页面后,我注意到其他选项的默认值不应干扰。我道歉。我也没有提到我确实在#foo 上指定了pager(参见新的jsFiddle 示例)。这会导致问题吗?
  • 函数的第 3 行:$('.shuffle').data('cycle.opts', changedOpts); 不是必需的,因为 changedOpts 是对 cycle.opts 对象的引用
【解决方案2】:

使用您的方法,在初始设置后无法动态更改悬停时的暂停行为。解决方法代码发布在下面。

根据您问题中的 jsFiddle 示例,我无法使其正常工作。

在我的例子中,我希望幻灯片像往常一样循环播放,但在用户第一次单击图像后激活悬停行为。

经过一些调试后,似乎我想动态更改的特定选项,即“暂停”和“pauseOnPagerHover”,在第一次设置幻灯片后将不适用。

在没有找到实际原因的情况下,我拼凑了一个可行的解决方案来解决我的问题,如下所示:

// After toggling image manually the first time by clicking it, enable pause on hover.
$('.slideshow-image-link').click(function (e) {
    e.preventDefault();
    // When clicked the first time, set up a hover event pausing the slideshow.
    // It seems like changing the 'pause' option can't be done dynamically after
    // setting up the slideshow cycle.
    $('#slideshow-images').cycle('pause');
    $('.slideshow-image-link').hover(
        function () {  // On mouse in.
            $('#slideshow-images').cycle('pause');
        },
        function () {  // On mouse out.
            $('#slideshow-images').cycle('resume');
        }
    );
});

这是一个 jsFiddle 演示上面的代码。

【讨论】:

  • 抱歉拖了这么久。我决定在jsFiddle 中试用您的代码,虽然我们仍然无法获得所需的功能,但它肯定会产生所需的行为。我暂时接受这个作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多