jquery - 创建拯救国家的 Accordion

标签 jquery url accordion

我已经编写了一些代码来为我的网站创建一个 Accordion 。我的问题是,我希望用户能够与其他人共享(复制粘贴)URL,以使他们看到与与他们共享的人打开的相同的 Accordion 项目。现在,我的代码可以工作,但是如果页面太长,它会跳转到 Accordion 项目的位置。这会产生我希望避免的丑陋效果。理想情况下,我无需单击链接即可操作 URL。

这是我现在拥有的: http://codepen.io/anon/pen/vHlJa

HTML:

<ul id="accordion">
  <li id="1"><a href="#1">Title 1</a>
    <div>Lorem ipsum dolor sit amet. </div>
  </li>
  <li id="2"><a href="#2">Title 2</a>
    <div>Lorem ipsum dolor sit amet. </div>
  </li>
   <li id="3"><a href="#2">Title 3</a>
    <div>Lorem ipsum dolor sit amet. </div>
  </li>
</ul>

jQuery:

$('#accordion>li').find('div').hide();

if(window.location.hash) {
   var hash = window.location.hash;
} else {
   var hash = '#1'; 
} 
$('#accordion ' + hash).addClass('open').find('div').show();

$('#accordion>li').on('click',function(){
   $('.open div').slideUp().removeClass('open');   
   $(this).addClass('open').children('div').slideDown().end()   
   .siblings().removeClass('open');
});

我创建了一个代码笔来展示我的意思: http://codepen.io/anon/pen/vHlJa

最佳答案

您可以使用return false来阻止链接的默认操作(滚动到 anchor )。

所以你必须动态更改哈希值:

window.location.hash = '#' + $(this).attr('id');

您可能还想使用平滑滚动来防止“跳转”到某个位置,但仍然滚动到用户的右侧幻灯片:您可以​​使用 $('html,body').animate({scrollTop : ...});slideDown()动画结束后,如下:

.slideDown(function(){
    $('html,body').animate({
        scrollTop: $(this).parent().offset().top
    }, 500);
})

这是一个带有修改后示例的 jsbin :(我使用 JSBin 因为我在 codepen 中遇到了哈希问题):

http://jsbin.com/wahes/1#1

http://jsbin.com/wahes/1#2

http://jsbin.com/wahes/1#3

关于jquery - 创建拯救国家的 Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21775399/

相关文章:

vue.js - Vue js 组件中的 jQuery Accordion

javascript - 如何动态添加ondragstart事件到动态创建的div

php - 如何更新 HTML 中特定表格行的数据?

javascript - 整页js将下一节滑过当前

php - 在不更改 URL 的情况下加载页面并保持相对路径有效

Symfony 3,如何使用redirectToRoute方法传输URL参数

javascript - 将标签内容设置为幻灯片图像

Javascript:在文档中查找 URL

html - Accordion 背景图像的大小

angularjs - 如何在 Accordion Bootstrap 中使奇偶行具有不同的颜色?