1.0.2 • Published 3 years ago

@arco-design/transformable v1.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

#Transformable - Powerful 2D Gesture Anim Solution

Preview


Effect Preview

Installation


Available as an npm package

// with npm
npm install @arco-design/transformable

// with yarn
yarn add @arco-design/transformable

Quick Start


import TransformAble from '@arco-design/transformable';

function MyComponent() {
    const domRef = useRef(null);
    const controllerRef = useRef(null);
    useEffect(() => {
        controllerRef.current = new TransformAble({
            dom: this.dom,
            onTransform: (state) => {
                const { translateX, translateY, scale, transformOrigin } = state;
                // DO SOMETHING IF NECESSARY
            },
        });
    }, []);
    function resetDom() {
        controllerRef.current.zoomTo(1, {
            fitEdge: true,
        });
    }
    return (
        <div className="transform-container"
            style={{ overflow: 'hidden' }}
        >
            <div
                className="transform-demo-object"
                ref={domRef}
            >
            <Button onClick={resetDom}>reset</Button>
        </div>
    )
}

Options


All this options can be dynamic changed by calling .config()

NameTypeDefaultDecription
activebooleantrueinteractive avaiable status flag
maxScalenumber2max scale limit
minScalenumber0.5min scale limit
preventScrollbooleantruetriggle e.preventDefault since touch, in order to prevent scroll dom behavior
domHTMLElementnulltransform & interactive target
useDomBoundarybooleantruedecide how to compute target boundary for collision detection (inside edge). true: use dom.getBoundingClientRect when dom set; false: manually set by .setBoundary()
bouncingnumber300scale bouncing animation duration(ms)
dampnumber2momentum-based scrolling option, speed decreasement per frame, default as 2px/frame
bounceRateXnumber0drag damping translate offset / touch offset when drag(x-axis) out of viewport, set (0, 1] value to enable dragging out of edge with damping effect and rebound animation
bounceRateXnumber0drag damping translate offset / touch offset when drag(y-axis) out of viewport, same to above
motionThresholdnumber10min speed for genreate momentum-based scrollin effect, default as 10px/frame
fixedXbooleanfalsedisable x-axis dragging
fixedYbooleanfalsedisable y-axis dragging
dragModestring'hybrid'drag effect mode. 'always': enable dragging without scaling; 'hybrid': enable drag only if scaled; 'none': no dragging
swipeModestring'animation'decide how to implement momentum-based scrolling animation.'animation': insert <style> css declaration when animation triggered; 'transition': use transition ease function when animation triggered
transformModestring'translate-first'animation effect may be different when dragging & scaling both.'translate-first': set css property transform as translate()scale();'scale-first': set transform as scale()translate();'matrix': set transform as matrix()
cubicobject{ scroll: .33, 1, .66, 1, bounce: .17, 1, .17, 1, }anim easing function (cubic-bezier) of scroll/bounce effect
viewportobject{ left: 0, right: screenWidth, top: 0, bottom: screenHeight}viewport scope for collision detection, the edge is defined as viewport ∩ boundary