js+css实现可调配置参数的彩色曲线圈圈动画效果代码

代码语言:html

所属分类:动画

代码描述:js+css实现可调配置参数的彩色曲线圈圈动画效果代码

代码标签: js css 配置 参数 彩色 曲线 圈圈 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
 
<meta charset="UTF-8">
 

 
 
<style>
@layer reset, base, demo;

@layer demo {
        .controls-panel {
                position: absolute;
                top: 1rem;
                right: 1rem;

                background: rgba(78 170 246 / 0.5);
                backdrop-filter: blur(4px);
                border: 1px solid rgba(255 255 255 / 0.35);
                border-radius: 5px;
                width: var(--control-panel-width, 2rem);
                display: grid;
                grid-template-rows: var(--control-panel-rows, 2rem 0fr);
                transition: grid-template-rows 300ms ease-in-out var(--delay-reveal, 0ms),
                        width 300ms ease-in-out var(--delay-width, 400ms);
        }
        .controls-panel > label {
                cursor: pointer;
                margin: 0;
                transition: rotate 300ms ease-in-out;
                display: grid;
                place-content: center end;
                color: white;
        }
        .controls-panel > label:hover > svg {
                rotate: 90deg;
        }
        .controls-panel > label > svg {
                --toggle-icon-scale: var(--toggle-config-scale, 1);
                grid-area: 1 / 1;
                margin-right: 0.25rem;
                width: 100%;
                transition: 300ms ease-in-out;
                scale: var(--toggle-icon-scale, 1);
        }
        .controls-panel > label > svg:last-of-type {
                --toggle-icon-scale: var(--toggle-close-scale, 0);
        }
        .controls-panel input[type="checkbox"] {
                position: absolute;
                width: 1px;
                height: 1px;
                padding: 0;
                margin: -1px;
                overflow: hidden;
                clip: rect(0, 0, 0, 0);
                white-space: nowrap;
                border-width: 0;
        }
        .controls-panel:has(input[type="checkbox"]:checked) {
                --control-panel-rows: 2rem 1fr;
                --control-panel-width: 280px;
                --delay-reveal: 400ms;
                --delay-width: 0ms;
                --toggle-close-scale: 1;
                --toggle-config-scale: 0;
        }

        .controls {
                overflow: hidden;
                display: grid;
                gap: 0.5rem;
        }
        .controls > div {
                display: grid;
                grid-template-columns: 1fr 1fr;
                gap: 0.5rem;
                padding-inline: 1rem;
        }
        .controls > div:last-child {
                margin-bottom: 1rem;
        }
        .controls > div > label {
                font-size: 0.75rem;
                text-align: right;
        }
        input[type="range"] {
                width: 100%;
        }
        /* color picker range slider */
        input[type="range"].color-picker {
                -webkit-appearance: none;
                width: 100%;
                height: 6px;
                border-radius: 5px;
                background: linear-gradient(
                        to right,
                        hsl(0, 100%, 50%),
                        hsl(60, 100%, 50%),
                        hsl(120, 100%, 50%),
                        hsl(180, 100%, 50%),
                        hsl(240, 100%, 50%),
                        hsl(300, 100%, 50%),
                        hsl(360, 100%, 50%)
                );
                outline: none;
                transition: background 0.2s;
        }

        input[type="range"].color-picker {
                --clr-thumb: black;
        }
        input[type="range"].color-picker::-webkit-slider-thumb {
                -webkit-appearance: none;
                width: 16px;
                height: 16px;
                border-radius: 50%;
                background: var(--clr-thumb);
                border: 2px solid white;
                cursor: pointer;
                transition: background 0.2s;
        }

        input[type="range"].color-picker::-moz-range-thumb {
                width: 16px;
                height: 16px;
                border-radius: 50%;
                background: var(--clr-thumb);
                border: 2px solid white;
                cursor: pointer;
                transition: background 0.2s;
        }

        .wrapper {
                --inner-duration: 16s;
                --inner-delay-factor: calc(var(--inner-duration) / 100);
                --inner-size: 200px;
                --inner-offset: -100px;
                --inner-radius: 50%;
                --outer-duration: calc(var(--inner-duration) * 1.5);
                --outer-delay-factor: calc(var(--inner-duration) / 5);
                --clr-even: var(--clr-1, hotpink);
                --clr-odd: var(--clr-2, steelblue);

                /* elements to add to controls:
                - timing function
                - scale
                */
                --outer-timing-function: linear;
                --inner-timing-function: ease-in-out;
                --inner-scale: 1.2;

                display: grid;
                place-content: center;
        }
        .ani {
                grid-area: 1 / 1;
                display: grid;
                place-content: center;
                animation: var(--outer-duration) ani-outer var(--outer-timing-function)
                        infinite;
                animation-delay: calc(var(--outer-delay-factor) * var(--j) * -1);
        }
        .ani:nth-child(odd) > div {
                --clr: var(--clr-odd);
        }
        .ani > div {
                -.........完整代码请登录后点击上方下载按钮下载查看

网友评论0