Esc

Try “tilt”, “reveal”, “drag”, or “reduced motion”.

Background

Migrating

Move from Kinesis 1 (data attributes) or vue-kinesis (components) to CSS properties and the kinesis() function.

Kinesis 2 replaces containers, element types, and data-ks-* attributes with a scope and CSS properties. Keep your markup, add data-kinesis to the container, and move each option into CSS.

What changed

  • One container attribute. data-kinesistransformer, data-kinesisdepth, data-kinesisaudio, and data-kinesispath become data-kinesis.
  • No element attributes. Behavior goes in CSS on your own class names, where media queries and tokens apply.
  • Springs instead of durations. data-ks-duration and data-ks-easing become a motion preset: soft, smooth, snappy, bouncy, or heavy.
  • No throttling. Kinesis samples input once per frame and stops when idle. data-ks-throttle has no replacement.
  • Your transforms stay. Kinesis 1 overwrote transform. Kinesis 2 never writes it.

Kinesis 1

<!-- Kinesis 1 -->
<div data-kinesistransformer data-ks-duration="1000">
  <div data-kinesistransformer-element data-ks-strength="20" data-ks-transform="translate"></div>
</div>
<!-- Kinesis 2 -->
<div class="scene" data-kinesis>
  <div class="layer"></div>
</div>
.scene { --k-motion: soft; }
.layer { --k-parallax: 20px; }
// initializeKinesis() is now:
import { initKinesis } from "@amineyarman/kinesis"
initKinesis()

Transformer elements

Kinesis 1Kinesis 2
data-ks-transform="translate" + data-ks-strength="20"--k-parallax: 20px
data-ks-transform="rotate" + data-ks-strength="20"--k-spin: 20deg
data-ks-transform="tilt"--k-tilt: 10deg
data-ks-transform="tilt_inv"--k-tilt: -10deg
data-ks-transform="scale"--k-when: near; --k-scale: 1.2
data-ks-transformaxis="X"--k-axis: x
data-ks-interactionaxis--k-axis
data-ks-transformoriginplain CSS transform-origin
data-ks-interaction="scroll"--k-when: scroll with --k-x, --k-y, --k-rotate, or --k-scale
data-ks-perspective--k-perspective
data-ks-active="false"remove the property, or use a class

Depth

<!-- Kinesis 1 -->
<div data-kinesisdepth data-ks-sensitivity="15">
  <div data-kinesisdepth-element data-ks-depth="5"></div>
</div>
/* Kinesis 2: tilt the container, lift the children */
.scene { --k-tilt: 15deg; }
.scene .layer { --k-depth: 50px; }

Distance items

data-kinesisdistance-item becomes a pointer effect or a near reaction.

Kinesis 1Kinesis 2
data-ks-interaction="attraction"--k-magnetic: 0.3
data-ks-interaction="repulsion"--k-repel: 20px
data-ks-interaction="linear" + data-ks-transform="scale"--k-when: near; --k-scale: 1.2
data-ks-startdistance="200"--k-radius: 200px

Scroll items

data-kinesisscroll-item becomes --k-when: scroll for the element crossing the viewport, or --k-when: page for the whole document, plus an output:

.badge {
  --k-when: scroll;
  --k-y: 40px -40px;
}

Paths

Paths are plain CSS offset-path, driven by --k-progress. See Along a path.

Audio

Audio is a separate module, used from JavaScript, and can drive any property. See Audio.

vue-kinesis

<kinesis-container> becomes an element with data-kinesis. <kinesis-element> becomes CSS properties or the v-kinesis directive. Register the plugin once with app.use(KinesisPlugin) from @amineyarman/kinesis/vue.

vue-kinesisKinesis 2
<kinesis-container><div data-kinesis>
<kinesis-element :strength="10">v-kinesis="{ parallax: 10 }"
type="depth"{ depth: 40 } inside a tilted parent
type="rotate"{ spin: 20 }
type="scale"{ when: 'near', scale: 1.2 }
axis="x"{ axis: 'x' }
event="scroll"{ when: 'scroll', y: [40, -40] }
:duration / easing{ motion: 'soft' }
<kinesis-distance>{ magnetic: 0.3 } or { repel: 20 }
<kinesis-audio>createAudio() with bind()

Edit this page on GitHub