首页 > 其他分享 >svg动画 - 渐变色进度条

svg动画 - 渐变色进度条

时间:2023-08-22 18:33:16浏览次数:25  
标签:进度条 渐变色 currLen setAttribute color1 svg x2 rect2

 

 

<h1>按w前进   按s后退</h1>

<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="400" viewBox="0 0 400 400">
<defs>
<linearGradient id="gradient" x1="-100%" x2="0%" y1="0" y2="0">
<stop offset="0%" stop-color="#a40c00"/>
<stop offset="50%" stop-color="#e9c42f"/>
<stop offset="100%" stop-color="#2fe37b"/>
</linearGradient>

<linearGradient id="gradient2" x1="0%" x2="100%" y1="0" y2="0">
<stop offset="0%" stop-color="#a40c00"/>
<stop offset="50%" stop-color="#e9c42f"/>
<stop offset="100%" stop-color="#2fe37b"/>
</linearGradient>

<clipPath id="rectClip">
<rect x="0" y="200" width="400" height="20" rx="10" ry="10" fill="none">
</rect>
</clipPath>

</defs>

<rect x="0" y="0" width="400" height="100" fill="url(#gradient2)">
</rect>

<rect x="0" y="200" width="400" height="20" rx="10" ry="10" fill="gray">
</rect>
<rect class="rect2" x="-380" y="200" width="400" height="20" rx="10" ry="10" style="clip-path: url(#rectClip)" fill="url(#gradient)">
</rect>

</svg>

<script type="text/javascript">
    const color1 = document.querySelector("linearGradient");
    const rect2 = document.querySelector(".rect2");
    
    let x2 = rect2.getAttribute('x');
    let y2 = rect2.getAttribute('y');
    
    let currLen = 0;
    
    document.onkeydown = function(event){
        if (event.key == 'w') {
            currLen = currLen + 3;
        } else if (event.key == 's') {
            currLen = currLen - 3;
        } else {
            return;
        }
        (currLen > 380) && (currLen = 380);
        (currLen < 0) && (currLen = 0);
        rect2.setAttribute('x', -380 + currLen);
        color1.setAttribute('x1', -100 + currLen / 4);
        color1.setAttribute('x2', 0 + currLen / 4);
    }
    
</script>

 

注意:渐变色的 x1 和 x2 不要加百分号

如果写成下面这样,就达不到预期的效果了

color1.setAttribute('x1', -100 + currLen / 4 + "%");
color1.setAttribute('x2', 0 + currLen / 4 + "%");

 

 效果会变成下图这样,是一个完整的渐变色区间的移动

不加百分号其实是等于把渐变色的区间放大了一百倍,每次只取中间的10分之一

 

标签:进度条,渐变色,currLen,setAttribute,color1,svg,x2,rect2
From: https://www.cnblogs.com/LcxSummer/p/17649402.html

相关文章

  • svg动画 - 旋转的彗星
    案例: <svgxmlns="http://www.w3.org/2000/svg"width="389"height="412"viewBox="-10-10389412"fill="none"><pathd="M43.971271.3301C54.978771.330164.923572.872.099375.1629C75.6898......
  • svg动画 - 仪表盘
    案例: <svgwidth="65"height="66"viewBox="006566"fill="none"xmlns="http://www.w3.org/2000/svg"><pathopacity="0.102"fill-rule="evenodd"clip-rule="evenodd"......
  • 微信小程序:环形进度条模块
    利用canvas实现微信小程序环形进度条模块。模块下载链接:下载链接最近开发一款背单词的微信小程序,计划使用环形进度条展示每日背单词进度。效果图如下(可渐变颜色):开发步骤1、在根目录创建名为components的文件夹,用来放需要引用的自定义组件。2、创建名为circle的文件夹,用来放......
  • vue3 文件上传进度条组件
    index.vue文件<template><divclass="confirm-modal"><transitionname="fade"><divclass="modal-dialog"@click="clickMaskToClose?handleCancel():null"v-if="visible"@tou......
  • 微信小程序:环形进度条模块
    利用canvas实现微信小程序环形进度条模块。模块下载链接:下载链接最近开发一款背单词的微信小程序,计划使用环形进度条展示每日背单词进度。效果图如下(可渐变颜色):开发步骤1、在根目录创建名为components的文件夹,用来放需要引用的自定义组件。2、创建名为circle的文件夹,用来放环形......
  • svg foreignObject 作用总结
    svgforeignObject主要能实现文本换行和dom转图片两个功能1.svg文本换行svg文字功能很弱,不支持自动换行,需要用tspan进行截断<svgxmlns="http://www.w3.org/2000/svg"><textfont-size="16"><tspanx="0"y="10">这个是一段要换</tspan>......
  • Python进度条
    Python进度条li=list(range(10))importtime#使用经典的tqdm来实现进度条importtqdmforiintqdm.tqdm(li):time.sleep(0.2)print(i)#使用更新更好看的rich来实现进度条(print的输出不影响进度条)fromrich.progressimporttrackforiintrack(li):......
  • iOS快速实现环形渐变进度条
    前言进度条相信我们大家都不陌生,往往我们很多时候需要使用到圆形进度条。这篇文章给大家分享了利用ios如何快速实现环形进度条,下面来一起看看。一:先制作一个不带颜色渐变的进度条自定义一个cycleview,在.m中实现drawrect方法-(void)drawrect:(cgrect)rect{cgcontextrefctx......
  • svg效果之文字贴合纹理
    效果如下,文字随着背景明暗变化 <svgviewBox="00660300"><defs><filterid="comform"><feImage:href="image1"x="0"y="0"width="100%"height="100%&......
  • 小程序环形进度条(基于l-circularProgress)
    组件预览: 组件代码:<viewclass="progress-wrap"> <l-circularProgress:box-width="progressBoxWidth":box-height="progressBoxWidth":fontShow="false" progressColor="#fff5de":lineWidth="cir......