麦粉社区
>
建议征集
>
帖子详情

关于组件变色类呼吸效果的研究

建议征集 发表于 2024-8-29 19:36
发表于 2024-8-29 19:36:02
本帖最后由 君茗 于 2024-8-30 09:20 编辑

之前看到过一种效果,类似下图,尝试在Smartbi中实现



采用方式:宏代码


概要原理:定时器循环修改组件样式;保证颜色以A->B->C->B->A进行循环


初步实现效果:



———————————————————————————————————————


思考:初步具有了呼吸效果。


    若想实现不间断的呼吸效果,需得到两个rgba的中间数据。


    应以步长的形式获得,这样能保证代码中try部分只写一个rgba值,然后通过步长来控制;同时阴影也可以通过此步长来控制


参考:【仪表盘】地图实现循环高亮效果 - Smartbi Insight V11帮助中心 -


          【仪表盘】根据占比设置柱图中柱子的颜色 - Smartbi Insight V11帮助中心 -


附相关代码(事件为onBeforeRender):


function main(page: IPage, portlet: IEChartsPortlet) {
    var options = portlet.getChartOptions();
    var series = options.series[0];
    var sint = 1;//此参数为变化依据,为不同值是更改不同的series样式
    var threshold = 1;//此为阈值变化依据,控制sint参数以正弦形式变化
    var interval = setInterval(function () {
        try {
            if (sint == 1) {
                series.lineStyle = {
                    "normal": {
                        "color": "rgba(30,144,255,1)",
                        "shadowColor": "rgba(30,144,255,1)",
                        "shadowBlur": 5
                    }
                }
            } else if(sint == 0.9) {
                series.lineStyle = {
                    "normal": {
                        "color": "rgba(30,144,255,0.9)",
                        "shadowColor": "rgba(30,144,255,0.9)",
                        "shadowBlur": 10
                    }
                }
            } else if(sint == 0.8) {
                series.lineStyle = {
                    "normal": {
                        "color": "rgba(30,144,255,0.8)",
                        "shadowColor": "rgba(30,144,255,0.8)",
                        "shadowBlur": 15
                    }
                }
            } else {
                series.lineStyle = {
                    "normal": {
                        "color": "rgba(30,144,255,0.7)",
                        "shadowColor": "rgba(30,144,255,0.7)",
                        "shadowBlur": 20
                    }
                }
            }   
        } catch (e) {
            console.error(e);
        } finally {
            portlet.setChartOptions(options);
            //让数据在阈值内以正弦形式变化
            if (sint == 1) {
                threshold = -threshold;
                sint = sint + 0.1 * threshold;
            } else if (sint <= 0.71) {
                threshold = -threshold;
                sint = sint + 0.1*threshold;
            } else {
                sint = sint + 0.1*threshold;
            }
        }
    } , 1000)
}

 

发表于 2024-9-4 08:55:59
若想实现不间断的呼吸效果,需得到两个rgba的中间数据。
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1回帖数 0关注人数 3030浏览人数
最后回复于:2024-9-4 08:55
快速回复 返回顶部 返回列表