How to use CSS and D3 to achieve cycloid swing effect animation

不言
Release: 2018-08-10 09:55:50
Original
2247 people have browsed it

The content of this article is about how to use CSS and D3 to realize the cycloid swing effect animation. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you. .

Effect preview

How to use CSS and D3 to achieve cycloid swing effect animation

Code interpretation

Define dom, the container contains 3 elements, representing 3 cycloids:

<div>
    <span></span>
    <span></span>
    <span></span>
</div>
Copy after login

Centered display:

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(lightyellow, burlywood);
}
Copy after login

Define the size of the container and draw a fixed cycloid to indicate the wall:

.pendulums {
    width: 40em;
    height: 30em;
    font-size: 10px;
    border-top: 0.3em solid cadetblue;
}
Copy after login

Draw a cycloid:

.pendulums {
    position: relative;
}

.pendulums span {
    position: absolute;
    width: 0.2em;
    height: 15em;
    background-color: cadetblue;
    left: 50%;
}
Copy after login

Use pseudo elements to draw the small ball hanging at the bottom of the cycloid:

.pendulums span::before {
    content: '';
    position: absolute;
    width: 1.5em;
    height: 1.5em;
    background: steelblue;
    border-radius: 50%;
    top: 100%;
    left: -0.75em;
}
Copy after login

Use radial gradients to add light and shadow to the small ball:

.pendulums span::before {
    background: radial-gradient(
        circle at 70% 35%,
        white,
        darkturquoise 30%,
        steelblue 50%
    );
}
Copy after login

Use pseudo elements to draw the shadow of the small ball:

.pendulums span::after {
    content: '';
    position: absolute;
    width: 2em;
    height: 0.3em;
    background-color: rgba(0, 0, 0, 0.2);
    top: 120%;
    left: -1em;
    filter: blur(0.4em);
}
Copy after login

Take the vertex of the cycloid as the origin, rotate the cycloid to the left:

.pendulums span {
    transform-origin: 50% top;
    transform: rotate(25deg);
}
Copy after login

Let the cycloid swing:

.pendulums span {
    animation: swing ease-in-out infinite;
    animation-duration: 1.5s;
}

@keyframes swing {
    50% {
        transform: rotate(-25deg);
    }
}
Copy after login

Define subscript variables for each cycloid:

.pendulums span:nth-child(1) {
    --n: 1;
}

.pendulums span:nth-child(2) {
    --n: 2;
}

.pendulums span:nth-child(3) {
    --n: 3;
}
Copy after login

Use variables to set the length of the cycloid and the duration of the animation, which are gradually increasing arithmetic sequences:

.pendulums span {
    height: calc((var(--n) - 1) * 1em + 15em);
    animation-duration: calc((var(--n) - 1) * 0.02s + 1.5s);
}
Copy after login

Next, use d3 to batch process dom elements and css variables:
Introduce the d3 library:

<script></script>
Copy after login

Use d3 to create the dom element of the cycloid:

const COUNT = 3;

d3.select('.pendulums')
    .selectAll('span')
    .data(d3.range(COUNT))
    .enter()
    .append('span')
Copy after login

Use d3 to define the subscript variable of the cycloid:

d3.select('.pendulums')
    .selectAll('span')
    .data(d3.range(COUNT))
    .enter()
    .append('span')
    .style('--n', (d) => d + 1);
Copy after login

Delete the html The relevant dom definitions in the file and the variable definitions in the css file.

Finally, adjust the number of cycloids to 15.

const COUNT = 15;
Copy after login

Related recommendations:

How to use CSS to achieve the animation effect of a roller coaster loader

How to use pure CSS to achieve the effect of a green pig

The above is the detailed content of How to use CSS and D3 to achieve cycloid swing effect animation. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template