use stick to bottom
1.0.0
useStickToBottom
تم تصميمه مع وضع روبوتات الدردشة التي تعمل بالذكاء الاصطناعي في الاعتبار، مما يعمل على تشغيل
bolt.new
بواسطة StackBlitz
خطاف React خفيف الوزن لا يعتمد على أي شيء + مكون يلتصق تلقائيًا بأسفل الحاوية ويحرك المحتوى بسلاسة للحفاظ على موضعه المرئي على الشاشة أثناء إضافة محتوى جديد.
overflow-anchor
الذي لا يدعمه Safari.isAtBottom
والتمرير برمجيًا إلى الأسفل.ResizeObserver
الحديثة والمدعومة جيدًا لاكتشاف متى يتم تغيير حجم المحتوى.scrollToBottom
Promise<boolean>
والذي سيتم تحويله إلى true
بمجرد نجاح التمرير، أو false
إذا تم إلغاء التمرير.<StickToBottom>
import { StickToBottom , useStickToBottomContext } from 'use-stick-to-bottom' ;
function Chat ( ) {
return (
< StickToBottom className = "h-[50vh] relative" resize = "smooth" initial = "smooth" >
< StickToBottom . Content className = "flex flex-col gap-4" >
{ messages . map ( ( message ) => (
< Message key = { message . id } message = { message } / >
) ) }
< / StickToBottom . Content >
< ScrollToBottom / >
{ /* This component uses `useStickToBottomContext` to scroll to bottom when the user enters a message */ }
< ChatBox / >
< / StickToBottom >
) ;
}
function ScrollToBottom ( ) {
const { isAtBottom , scrollToBottom } = useStickToBottomContext ( ) ;
return (
! isAtBottom && (
< button
className = "absolute i-ph-arrow-circle-down-fill text-4xl rounded-lg left-[50%] translate-x-[-50%] bottom-0"
onClick = { ( ) => scrollToBottom ( ) }
/ >
)
) ;
}
useStickToBottom
هوك import { useStickToBottom } from 'use-stick-to-bottom' ;
function Component ( ) {
const { scrollRef , contentRef } = useStickToBottom ( ) ;
return (
< div style = { { overflow : 'auto' } } ref = { scrollRef } >
< div ref = { contentRef } >
{ messages . map ( ( message ) => (
< Message key = { message . id } message = { message } / >
) ) }
< / div >
< / div >
) ;
}