【问题标题】:Automated Accordion自动手风琴
【发布时间】:2010-11-30 15:42:41
【问题描述】:

我正在尝试让手风琴菜单自动循环,而我一直在寻找的每一件事都对说明非常模糊。我找到了几个答案,说我可以使用循环插件来循环,所以这就是我所尝试的。我无法让循​​环功能正常工作。我是否以正确的方式进行,如果是,我的代码中遗漏了什么?

我是 jQuery 的新手,所以这一切对我来说有点不知所措。谢谢。

<script type="text/javascript" >
$(document).ready(function(){
lastBlock = $("#a1");
maxWidth = 380;
minWidth = 50;  

$("#slide ul li a").hover(
  function(){
    $(lastBlock).animate({width: minWidth+"px"}, { queue:false, duration:400 });
$(this).animate({width: maxWidth+"px"}, { queue:false, duration:400});
lastBlock = this;
  }
);
});
 $(function() {
$('#slide').cycle({ 
  fx:     'slideY', 
  easing: 'bounceout', 
  delay:  -4000 
});
});
  </script>

<div id="slide" class="cycle">
<ul>
  <li>
    <a id="a1">
      <img src="image" />
    </a>
  </li>
  <li>
    <a>
       <img src="image" />
    </a>
  </li>
  <li>
    <a>
      <img src="image" />
    </a>
  </li>
  <li>
    <a>
      <img src="image" />
    </a>
  </li>
</ul>
</div>

【问题讨论】:

  • 您说的是这款手风琴吗? jqueryui.com/demos/accordion... 循环插件 (jquery.malsup.com/cycle) 用于图像。那么你到底想做什么?
  • 另外,如果你不知道,提醒某人你有消息是给他们的,请使用@{name} - 所以对我来说使用@Fudgey - 然后那个人会收到一条消息标志。
  • @Fudgey 感谢@{name} 的提示我将本教程用于手风琴designreviver.com/tutorials/…,因此我可以使用图像。我认为因为我使用的是图像,所以循环插件就可以了。如果有更好的方法来完成这项工作,我肯定愿意尝试。

标签: jquery jquery-plugins accordion cycle


【解决方案1】:

所以我不确定这是否正是您正在寻找的,但我写了一个快速解决方案,希望能帮助您找到解决方案:

HTML

<div id="slide" class="cycle">
    <ul>
        <li>
            <a id="a1">
                <img src="image" />
            </a>
        </li>
        <li>
            <a id="a2">
                <img src="image" />
            </a>
        </li>
        <li>
            <a id="a3">
                <img src="image" />
            </a>
        </li>
        <li>
            <a id="a4">
                <img src="image" />
            </a>
        </li>
    </ul>
</div>

jQuery

var lastBlock = $("#a1");
var maxWidth = 166;
var minWidth = 35;
var counter = 0;
var myInterval = 0;

$("#slide ul li a").mouseenter(

function() {
    $(lastBlock).animate({
        width: minWidth + "px"
    }, {
        queue: false,
        duration: 400
    });
    $(this).animate({
        width: maxWidth + "px"
    }, {
        queue: false,
        duration: 400
    });
    lastBlock = this;
    clearInterval(myInterval);
}).mouseleave(function() {
    myInterval = setInterval(doSomething, 4000);
});

function doSomething() {
    var i = counter++ % 4 + 1;
    $("#a" + i).trigger("mouseenter");
    $("#a" + i).trigger("mouseleave");
}

myInterval = setInterval(doSomething, 4000);

因此,在此解决方案中,设置了一个间隔来循环并触发事件mouseenter()mouseleave()。由于您可能不希望在鼠标悬停在某个元素上时图像循环播放,因此在mouseenter() 上清除间隔并在mouseleave() 期间再次设置。可以重构的一个令人困惑的部分是它使用带有模数运算的计数器循环遍历图像的方式。请注意,我为每个 &lt;a&gt; 添加了一个 ID,并对末尾的数字进行了增量更改。

在这里查看它的工作原理:http://jsfiddle.net/Ck3aZ/

【讨论】:

  • 非常感谢您的回复。
  • 我仍然有一个问题......我应该在我的标题中链接循环插件 jquery 文件和常规 jquery 文件吗?我现在有两个在那里,我似乎没有得到你在示例中得到的很好的完成。
  • jquery-1.3.2.min.js 和 jquery.cycle.min.js 不正确吗?
  • @Katie 我的示例没有使用 jQuery 循环插件,因此如果您使用此解决方案,则无需链接到该插件。如果您只是用提供的 jQuery 替换 $(document).ready(); 中的代码并将额外的 ID 添加到 &lt;a&gt; 标签,理论上它应该可以工作。
  • @tinifni 我从脚本的开头删除了准备好的文档...哎呀!效果很好,非常感谢!如果可以的话,我会给你买啤酒。
    我还有最后一个小问题。如果我想指定默认扩展哪个图像,有没有办法做到这一点?目前它正在加载所有折叠的图像。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多