如何实现Kendo Tooltip滚动至最后一项(最新用户评论)?
嘿,这个需求我之前也碰到过!要让Kendo Tooltip弹出时自动滚动到底部查看最新评论,其实只要结合Tooltip的内置事件和DOM操作就能轻松搞定,我分两种场景给你说:
场景1:评论内容是同步渲染的
如果你的评论内容是直接在content函数里同步生成的,直接在Tooltip的show事件里设置滚动条位置就好:
// 初始化Grid对应的Tooltip $("#yourGridId").kendoTooltip({ filter: "tr", // 定位到Grid的每一行 content: function(e) { // 替换成你生成评论内容的逻辑,比如从行数据中提取评论 const rowData = $("#yourGridId").data("kendoGrid").dataItem(e.target.closest("tr")); return `<div class="comments-container">${rowData.userComments.join("<br>")}</div>`; }, show: function(e) { // 获取Tooltip的内容容器DOM元素 const contentElement = e.sender.contentElement; // 将滚动条直接拉至底部 contentElement.scrollTop(contentElement[0].scrollHeight); } });
场景2:评论内容是异步加载的
如果评论是通过AJAX异步获取的,得等内容完全渲染到Tooltip后再操作滚动,不然会因为DOM未更新导致滚动失效:
$("#yourGridId").kendoTooltip({ filter: "tr", content: function(e) { const deferred = $.Deferred(); const rowId = e.target.closest("tr").data("row-id"); // 异步请求评论数据 $.get("/api/getUserComments", { id: rowId }, function(comments) { // 生成评论列表的HTML const commentHtml = comments.map(item => `<p>${item.content}</p>`).join(""); deferred.resolve(`<div class="comments-container">${commentHtml}</div>`); // 用setTimeout确保DOM更新完成后再滚动 setTimeout(() => { const tooltipContent = $(".k-tooltip-content"); tooltipContent.scrollTop(tooltipContent[0].scrollHeight); }, 0); }); return deferred.promise(); } });
额外注意事项
- 你已经设置的CSS
k-tooltip-content{ overflow-y: scroll !important }一定要保留,这是滚动条出现的前提,没有它的话scrollTop操作不会生效。 - 如果Tooltip弹出后评论还会实时更新,可以监听评论更新的事件,每次更新后重新执行
scrollTop操作,保证始终显示最新内容。
内容的提问来源于stack exchange,提问作者Zayn malik
相关产品推荐
相关产品推荐

