我正在使用microsoft botframework的webchat cdn来制作聊天机器人。当显示欢迎消息时,我的欢迎卡下方有几个按钮超出了聊天窗口的可见区域。因此,它会自动滚动到底部。我通过单击小部件按钮触发网络聊天。我想在欢迎消息卡出现时禁用滚动到按钮,以便用户可以看到欢迎卡区域,而不是按钮。如何禁用自动滚动?
不幸的是,没有禁用自动滚动的选项。有一个示例 04.api/n.save-restore-scroll-position,演示了如何在遍历网络聊天记录窗口时保存和恢复滚动位置。
您可以更改该示例,以便在收到每张新卡时在某个位置自动创建保存点。
本质上,您可以利用网络聊天的
store
来监控活动,检查来自机器人并带有附件的活动。当发生这种情况时,触发一个事件,该事件可以触发保存滚动位置的过程,类似于按下的按钮。
但是,在这种情况下可能存在时间问题,因为
store
是收到活动时的第一站。然后它继续被渲染。因此,在商店中执行的任何影响渲染的代码通常需要延迟 50 - 300 毫秒才能运行。请记住,如果成功的话,不能保证每次都会停在同一位置。以下是演示设置的示例。
const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
if ( action.type === 'DIRECT_LINE/INCOMING_ACTIVITY' ) {
const { activity } = action.payload;
setTimeout(() => {
if ( activity && activity.attachments) {
if (activity.attachments[0].contentType === 'application/vnd.microsoft.card.adaptive' ) {
// Do stuff
}
}
}, 300);
}
})
其他一些可能更好的选择是做一些与上面类似的事情,除了在activityMiddleware
attachmentMiddleware
中。这些选项允许您在渲染活动时进行操作,但它们也可能更加挑剔。
总而言之,尝试上述任何一种方法时,您的里程可能会有所不同,并且可能需要一些按摩才能完全知道它是否有效。
如果您认为这应该是一个包含的选项,我建议将其作为 BotFramework-WebChat 存储库中的功能请求
。如果您仍然遇到问题。请在