UNPKG

react-autoscroll-component

Version:
44 lines (37 loc) 1.42 kB
import React, {useEffect, useState, useRef} from 'react'; import './AutoScroll.css'; const AutoScroll = (props) => { const {stopAtEnd, onEnd, data} = props; const id = `AutoScroll_${Date.now()}` let timeoutId; const scroll = (element, top = 0, maxTop = Infinity) => { const newTop = top + 4; element.style.top = `-${newTop}px`; timeoutId = setTimeout(() => { if (newTop >= maxTop && onEnd) { setTimeout(() => { element.style.top = `0px` setTimeout(onEnd, 1000); }, 1000); } else scroll(element, newTop >= maxTop ? 0 : newTop, maxTop); }, 200) } useEffect(() => { const containerHeight = document.querySelector(`#${id}`).getBoundingClientRect().height; const elementHeight = document.querySelector(`#${id}>*`).getBoundingClientRect().height; if (elementHeight > containerHeight) { scroll(document.querySelector(`#${id}>*`), 0, elementHeight - containerHeight); } else if (elementHeight <= containerHeight && onEnd) { timeoutId = setTimeout(onEnd, 3000 * Math.random() + 3000) } return () => { clearTimeout(timeoutId) } }, [data]) return ( <div className='AutoScroll' id={id}> {props.children} </div> ) } export default AutoScroll;