

新闻资讯
行业动态本文详解如何使用 jquery 为自定义 treeview 组件添加平滑的展开/收起过渡动画(如 `slidetoggle`),并在点击时显示延迟加载提示(含旋转图标与文字),提升用户交互体验。
在构建可折叠树形菜单(Treeview)时,原生的 toggle() 方法虽能控制子菜单显隐,但缺乏视觉反馈与过渡感。通过引入 jQuery 的 slideToggle() 方法配合定时器(setTimeout),我们可轻松实现带延时的滑动动画与模拟加载状态,显著增强用户体验。
替换 toggle() 为 slideToggle(300)
提供自然的上下滑动动画,持续 300 毫秒,比瞬间切换更符合直觉。
动态插入加载提示(Loading Indicator)
点击节点后立即追加
统一延迟逻辑:300ms 后移除加载态并触发动画
使用 setTimeout 实现「先显示加载、再执行动画」的流程,避免视觉跳跃,且开/关操作均复用同一逻辑。
branch.on('click', function (e) {
if (this === e.target) {
var icon = $(this).children('i:first');
var $childrenUl = $(this).children('ul'); // 更精准地定位子 ul(推荐)
// 切换图标状态
icon.toggleClass(openedClass + " " + closedClass);
// 插入加载提示
$(this).append(' Loading...');
// 延迟执行:移除 loading 并滑动切换
setTimeout(() => {
$(this).find('.loading').remove();
$childrenUl.slideToggle(300);
}, 300);
}
});? 提示:建议将 $(this).children().children().slideToggle(...) 改为 $(this).children('ul').slideToggle(...),避免误操作非 子元素(如文本节点或 标签),提升健壮性。
.loading {
font-style: italic;
color: #666;
font-size: 0.85em;
padding: 4px 0 0 20px;
}
.loading .fa-spinner {
margin-right: 6px;
animation: spin 1s linear infinite; /* 确保旋转动画生效 */
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}if (!$(this).find('.loading').length) {
$(this).append('...');
}$childrenUl.stop(true, true).slideToggle(300);
通过三步轻量改造——替换切换方法、注入加载 UI、封装延迟逻辑,即可让静态 Treeview 具备专业级交互动效。该方案兼容现有 HTML 结构与插件初始化方式,无需重写核心逻辑,开箱即用。后续还可扩展为异步加载真实数据(如 AJAX 请求),此时 loading 状态将真正反映后端响应,进一步提升实用性与用户体验。