You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					36 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					36 lines
				
				1.2 KiB
			| 
											3 years ago
										 | /* eslint-disable no-nested-ternary */ | ||
|  | import { cancel, request } from './animationFrame'; | ||
|  | import height from './height'; | ||
|  | import getWindow from './isWindow'; | ||
|  | import getOffset from './offset'; | ||
|  | import getScrollParent from './scrollParent'; | ||
|  | import scrollTop from './scrollTop'; | ||
|  | export default function scrollTo(selected, scrollParent) { | ||
|  |   var offset = getOffset(selected); | ||
|  |   var poff = { | ||
|  |     top: 0, | ||
|  |     left: 0 | ||
|  |   }; | ||
|  |   if (!selected) return undefined; | ||
|  |   var list = scrollParent || getScrollParent(selected); | ||
|  |   var isWin = getWindow(list); | ||
|  |   var listScrollTop = scrollTop(list); | ||
|  |   var listHeight = height(list, true); | ||
|  |   if (!isWin) poff = getOffset(list); | ||
|  |   offset = { | ||
|  |     top: offset.top - poff.top, | ||
|  |     left: offset.left - poff.left, | ||
|  |     height: offset.height, | ||
|  |     width: offset.width | ||
|  |   }; | ||
|  |   var selectedHeight = offset.height; | ||
|  |   var selectedTop = offset.top + (isWin ? 0 : listScrollTop); | ||
|  |   var bottom = selectedTop + selectedHeight; | ||
|  |   listScrollTop = listScrollTop > selectedTop ? selectedTop : bottom > listScrollTop + listHeight ? bottom - listHeight : listScrollTop; | ||
|  |   var id = request(function () { | ||
|  |     return scrollTop(list, listScrollTop); | ||
|  |   }); | ||
|  |   return function () { | ||
|  |     return cancel(id); | ||
|  |   }; | ||
|  | } |