javascript - 使用 jQuery/JS 打开时,使 <details> 标签的内容具有动画效果

标签 javascript jquery html

我只是想让 HTML5 details 标签的内容“滑动”/动画打开,而不是立即弹出/显示。这可以用 jQuery/Javascript 实现吗?

Fiddle

HTML:

<details>
<summary>Show/Hide</summary>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum laoreet metus auctor tempor dignissim. Nunc tempor ligula malesuada, adipiscing justo quis, ultrices libero. Curabitur pretium odio sagittis lorem euismod, a ultrices sem ultrices. Integer sapien nibh, mollis id pretium id, dignissim ut dui. Nam sit amet lectus lectus. Cras scelerisque risus a dui accumsan, in dignissim dolor sodales. Nunc aliquam pharetra dui, a consectetur velit lobortis vel.</p>
<p>Mauris convallis orci in semper aliquam. Ut mollis laoreet nibh pretium tincidunt. Donec aliquam at odio sit amet dictum. Phasellus sapien leo, feugiat sit amet sagittis in, congue vel lectus. Donec elementum est vitae nulla interdum laoreet. Curabitur fringilla a tellus non laoreet. Aliquam vel lectus convallis massa pulvinar pellentesque. Mauris laoreet pharetra turpis vel tristique. Sed ligula ligula, sodales sed auctor in, aliquam sit amet lorem. Etiam vestibulum, libero vel dignissim ultrices, lacus mauris lacinia enim, quis aliquam nibh mauris eu mauris. Etiam sapien leo, dapibus et libero sed, laoreet ornare tellus.</p>
<p>Sed placerat vehicula magna et adipiscing. Nam euismod nibh ut tellus tempor, eget lobortis metus iaculis. In laoreet, enim in dignissim pellentesque, felis augue tincidunt massa, vestibulum fringilla mauris sapien in diam. Duis interdum molestie fermentum. Aenean dictum varius augue, id luctus neque viverra id. Nam eleifend tempus mauris in mattis. Sed id risus non magna semper blandit in vel arcu. Suspendisse quis nisi ligula. Fusce vestibulum at enim eu.</p>
</details>

最佳答案

太糟糕了,无法使用简单的 CSS 过渡。

因此我建议包装 summary 元素的兄弟元素,然后使用 .slideToggle()在他们。不过没那么简单,需要在details中添加open属性,默认隐藏内层包裹的元素。

这仅在您使用 e.preventDefault() 来阻止默认功能时有效;但是,您随后需要重写箭头指示符 (,)。

您将使用 summary::-webkit-details-markerdisplay:none 删除不再有效的标记,并通过添加您自己的自定义标记:before/:after 伪元素。

UPDATED EXAMPLE HERE

$('details summary').each(function(){
    $(this).nextAll().wrapAll('<div id="wrap"></div>');
});
$('details').attr('open','').find('#wrap').css('display','none');
$('details summary').click(function(e) {
    e.preventDefault();
    $(this).siblings('div#wrap').slideToggle(function(){
        $(this).parent('details').toggleClass('open');
    });
});

CSS:

summary::-webkit-details-marker {
    display: none;
}
summary:before {
    content: "►";
}
details.open summary:before {
    content: "▼";
}

如果您希望 details 元素默认打开,请添加 class="open" 而不是 open 属性,并且然后使用这个:$('details.open div#wrap').css('display','block');

ALTERNATIVE EXAMPLE - (默认打开)

关于javascript - 使用 jQuery/JS 打开时,使 <details> 标签的内容具有动画效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343744/

相关文章:

javascript - 如何在javascript中访问对象属性?

javascript - Vaadin 8 向 html head 标签添加代码的方式是什么?

jquery - 使用 jQuery 获取嵌套数据属性

javascript - 如何修复 jqgrid 列选择器垃圾布局

javascript - 根据特定列的数据在不同宽度的表格列中应用省略号

html - 使用 Div 标签在 CSS 中组织 HTML 元素——我在为某些类实现字体时哪里出错了?

javascript - jQuery 只允许在 .ajax() 之前单击一次

javascript - 如何在 ajax 在 Angular Js 上完成之前加载 View ?

javascript - 如何加快jquery中行的计算

javascript - Angular 2 视频播放器