Merge branches 'dev_item_bank', 'dev_new_shixunsrepository' and 'develop' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_new_shixunsrepository
	
		
	
				
					
				
			
						commit
						cfbb8acfed
					
				| @ -0,0 +1,51 @@ | |||||||
|  | /** | ||||||
|  |  * 抛物线动画函数 | ||||||
|  |  * @param ballWrapper 小球的父容器 | ||||||
|  |  * @param origin 动画起点DOM | ||||||
|  |  * @param target 动画目标DOM | ||||||
|  |  * @param time 持续时间 | ||||||
|  |  * @param a 抛物线参数 | ||||||
|  |  * @param offset 动画尺寸 | ||||||
|  |  * @param callback 回调 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | export function parabola(config) { | ||||||
|  | 	const { | ||||||
|  | 		ballWrapper, | ||||||
|  | 		origin, | ||||||
|  | 		target, | ||||||
|  | 		time = 1000, | ||||||
|  | 		a = 0.004, | ||||||
|  | 		callback, | ||||||
|  | 		finish, | ||||||
|  | 		offset = 0 | ||||||
|  | 	} = | ||||||
|  | 	config || {}; | ||||||
|  | 	const ballWrapperDimension = ballWrapper.getBoundingClientRect(); | ||||||
|  | 	const originDimension = origin.getBoundingClientRect(); | ||||||
|  | 	const targetDimension = target.getBoundingClientRect(); | ||||||
|  | 	const x1 = originDimension.left + 0.5 * originDimension.width; | ||||||
|  | 	const y1 = originDimension.top + 0.5 * originDimension.height; | ||||||
|  | 	const x2 = targetDimension.left + 0.5 * targetDimension.width; | ||||||
|  | 	const y2 = targetDimension.top + 0.5 * targetDimension.height; | ||||||
|  | 	const diffx = x2 - x1; | ||||||
|  | 	const diffy = y2 - y1; | ||||||
|  | 	const speedx = diffx / time; | ||||||
|  | 	const b = (diffy - a * diffx * diffx) / diffx; | ||||||
|  | 
 | ||||||
|  | 	const refPoint_x = x1 - ballWrapperDimension.left - 0.5 * offset; | ||||||
|  | 	const refPoint_y = y1 - ballWrapperDimension.top - 0.5 * offset; | ||||||
|  | 
 | ||||||
|  | 	const start = Date.now(); | ||||||
|  | 	const timer = setInterval(() => { | ||||||
|  | 		if (Date.now() - start > time) { | ||||||
|  | 			finish(); | ||||||
|  | 			clearInterval(timer); | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		const x = speedx * (Date.now() - start); | ||||||
|  | 		const y = a * x * x + b * x; | ||||||
|  | 		callback && callback(refPoint_x + x, refPoint_y + y); | ||||||
|  | 	}, 15); | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue