This is a JavaScript library to calculate the difference in pixels (px) between the current screen coordinate x-value of an element and the x-value of the screen center.
画面スクロールで要素が**から広がるCSSアニメーション用ライブラリ
JSでスクリーン座標xの**値からの移動位置量を計算して、CSS変数に設定する
<div class="card">...</div>
<div class="card">...</div>
<script src="https://cdn.jsdelivr.net/gh/happy358/CardSpreadPosition@v0.0.1/cardSpreadPosition.min.js"></script>
<script>
cardSpreadPosition.run({
element: ".card" /* your-class */
});
</script>
@property --card-angle {
syntax: "<angle>";
initial-value: 0deg;
inherits: false;
}
@property --card-x {
syntax: "<length>";
initial-value: 0px;
inherits: false;
}
@property --card-y {
syntax: "<length>";
initial-value: 0px;
inherits: false;
}
.card {
--card-x: 0px; /* auto set by CardSpreadPosition.js */
--card-y: 0px; /* auto set by CardSpreadPosition.js */
--card-angle: 0deg; /* auto set by CardSpreadPosition.js */
position: relative; /* or sticky */
width: 200px;
height: 200px;
animation: anim linear both;
animation-timeline: view();
animation-range: entry 25% contain 50%;
transform-origin: center;
transform: rotate3d(0, 0, 1, var(--card-angle))
translate3d(var(--card-x), var(--card-y), 0);
}
@keyframes anim {
to {
--card-x: 0px;
--card-y: 0px; /* if you want. */
--card-angle: 0deg; /* if you want. */
}
}
CSSにて次の3つの変数を使用している(名前変更不可!)
- --card-angle
- --card-x
- --card-y
cardSpreadPosition.run({
element: ".card", // default: ".card"
rangeAngle: 10, // random angle range
rangeX: 24, // random x-position range
rangeY: 15, // random y-position range
randomOrder: false // true: random z-index , default: false
});
お好みで、X値Y値をランダムにズラしたり、角度をランダムにつけたり、z-indexで表示順をランダムにしたりできる