mirror of https://github.com/sveltejs/svelte
				
				
				
			Merge pull request #2741 from pngwn/master
	
		
	
				
					
				
			Update animate example to use animate directive and built-in crossfad…pull/2744/head
						commit
						9dbd99b85d
					
				@ -1,65 +0,0 @@
 | 
				
			||||
import { quintOut } from 'svelte/easing';
 | 
				
			||||
 | 
				
			||||
export default function crossfade({ send, receive, fallback }) {
 | 
				
			||||
	let requested = new Map();
 | 
				
			||||
	let provided = new Map();
 | 
				
			||||
 | 
				
			||||
	function crossfade(from, node) {
 | 
				
			||||
		const to = node.getBoundingClientRect();
 | 
				
			||||
		const dx = from.left - to.left;
 | 
				
			||||
		const dy = from.top - to.top;
 | 
				
			||||
 | 
				
			||||
		const style = getComputedStyle(node);
 | 
				
			||||
		const transform = style.transform === 'none' ? '' : style.transform;
 | 
				
			||||
 | 
				
			||||
		return {
 | 
				
			||||
			duration: 400,
 | 
				
			||||
			easing: quintOut,
 | 
				
			||||
			css: (t, u) => `
 | 
				
			||||
				opacity: ${t};
 | 
				
			||||
				transform: ${transform} translate(${u * dx}px,${u * dy}px);
 | 
				
			||||
			`
 | 
				
			||||
		};
 | 
				
			||||
	}
 | 
				
			||||
 | 
				
			||||
	return {
 | 
				
			||||
		send(node, params) {
 | 
				
			||||
			provided.set(params.key, {
 | 
				
			||||
				rect: node.getBoundingClientRect()
 | 
				
			||||
			});
 | 
				
			||||
 | 
				
			||||
			return () => {
 | 
				
			||||
				if (requested.has(params.key)) {
 | 
				
			||||
					const { rect } = requested.get(params.key);
 | 
				
			||||
					requested.delete(params.key);
 | 
				
			||||
 | 
				
			||||
					return crossfade(rect, node);
 | 
				
			||||
				}
 | 
				
			||||
 | 
				
			||||
				// if the node is disappearing altogether
 | 
				
			||||
				// (i.e. wasn't claimed by the other list)
 | 
				
			||||
				// then we need to supply an outro
 | 
				
			||||
				provided.delete(params.key);
 | 
				
			||||
				return fallback(node, params);
 | 
				
			||||
			};
 | 
				
			||||
		},
 | 
				
			||||
 | 
				
			||||
		receive(node, params) {
 | 
				
			||||
			requested.set(params.key, {
 | 
				
			||||
				rect: node.getBoundingClientRect()
 | 
				
			||||
			});
 | 
				
			||||
 | 
				
			||||
			return () => {
 | 
				
			||||
				if (provided.has(params.key)) {
 | 
				
			||||
					const { rect } = provided.get(params.key);
 | 
				
			||||
					provided.delete(params.key);
 | 
				
			||||
 | 
				
			||||
					return crossfade(rect, node);
 | 
				
			||||
				}
 | 
				
			||||
 | 
				
			||||
				requested.delete(params.key);
 | 
				
			||||
				return fallback(node, params);
 | 
				
			||||
			};
 | 
				
			||||
		}
 | 
				
			||||
	};
 | 
				
			||||
}
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue