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, anddata-kinesispathbecomedata-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-durationanddata-ks-easingbecome a motion preset:soft,smooth,snappy,bouncy, orheavy. - No throttling. Kinesis samples input once per frame and stops when idle.
data-ks-throttlehas 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 1 | Kinesis 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-transformorigin | plain 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 1 | Kinesis 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-kinesis | Kinesis 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() |