power BI 倒计时+插件HTML Content,实现更新倒计时看板!

直接拿去玩吧,花了我两个小时。

搜了b站和百度都没找到像样的,就决定自己干一个了。

先看效果:

起个度量值,然后去power bi 插件那边搜索html Content,把这个放进html content插件的字段values即可。

复制代码
HTML倒计时每周一18点循环版 = 
"
<div style='text-align:center; padding:20px; background: #fff; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.1);'>
  <div style='margin-bottom: 15px; font-family: Arial; color: #444;'>
    <span style='font-size: 18px;'>数据更新倒计时</span>
    <span id='countdown' style='font-size: 24px; margin-left: 10px; color: #d32f2f;'>00天 00时 00分 00秒</span>
  </div>
  <svg width='300' height='30' xmlns='http://www.w3.org/2000/svg' style='overflow: visible;'>
    <rect width='100%' height='20' rx='10' fill='#f0f0f0'></rect>
    <defs>
      <linearGradient id='barGradient' x1='0%' y1='0%' x2='100%' y2='0%' gradientUnits='userSpaceOnUse'>
        <stop id='gradientStart' offset='0%' stop-color='#ff6b6b'/>
        <stop id='gradientEnd' offset='100%' stop-color='#d32f2f'/>
      </linearGradient>
    </defs>
    <path id='progress' d='M10,10 L290,10' stroke='url(#barGradient)' stroke-width='20'
          stroke-linecap='round' fill='none' stroke-dasharray='0 280'/>
  </svg>
</div>

<script>
  // 计算下一个周一 18:00
  function getNextMonday6PM() {
    var now = new Date();
    var day = now.getDay();           
    var offset = (1 - day + 7) % 7;   
    if(offset === 0 && now.getHours() >= 18) {
      offset = 7;
    }
    var target = new Date(now);
    target.setDate(now.getDate() + offset);
    target.setHours(18,0,0,0);
    return target;
  }

  var pathLength = 280;
  var elements = {
    progressBar: document.getElementById('progress'),
    gradientStart: document.getElementById('gradientStart'),
    gradientEnd: document.getElementById('gradientEnd'),
    countdown: document.getElementById('countdown')
  };

  var targetTime = getNextMonday6PM();
  var initialSeconds = Math.round((targetTime - new Date()) / 1000);

  function formatCountdown(sec) {
    var days = Math.floor(sec / 86400),
        hrs  = Math.floor((sec % 86400) / 3600),
        mins = Math.floor((sec % 3600) / 60),
        secs = sec % 60;
    var d = days < 10 ? '0' + days : days;
    var h = hrs   < 10 ? '0' + hrs   : hrs;
    var m = mins  < 10 ? '0' + mins  : mins;
    var s = secs  < 10 ? '0' + secs  : secs;
    return d + '天 ' + h + '时 ' + m + '分 ' + s + '秒';
  }

  function updateProgress() {
    var now = new Date();
    if(now >= targetTime) {
      targetTime = getNextMonday6PM();
      initialSeconds = Math.round((targetTime - now) / 1000);
    }
    var remaining = Math.round((targetTime - now) / 1000);
    var progress  = (initialSeconds - remaining) / initialSeconds * pathLength;

    elements.progressBar.setAttribute('stroke-dasharray', progress + ' ' + pathLength);
    elements.countdown.textContent = formatCountdown(remaining);

    var pct = remaining / initialSeconds;
    elements.gradientStart.setAttribute('stop-color',
      'hsl(0,' + (80 + 20 * (1 - pct)) + '%,60%)');
    elements.gradientEnd.setAttribute('stop-color',
      'hsl(0,' + (60 + 40 * (1 - pct)) + '%,40%)');
  }

  // 立刻执行并开始每秒更新
  updateProgress();
  setInterval(updateProgress, 1000);
</script>

<style>
  /* 1s 线性过渡,同步每秒步进,消除闪烁 */
  #progress {
    transition: stroke-dasharray 1s linear !important;
    will-change: stroke-dasharray;
  }
</style>
"
相关推荐
逃逸线LOF几秒前
CSS之网页元素的显示与隐藏(旧土豆网遮罩案例)
前端·css
_xaboy16 分钟前
开源表单设计器FcDesigner配置多语言教程
前端·vue.js·低代码·开源·表单设计器
文艺倾年26 分钟前
【系统架构师】2025论文《WEB系统性能优化技术》
前端·性能优化·系统架构
铃木隼.27 分钟前
Web技术与Nginx网站环境部署
前端·nginx·php
郭尘帅66631 分钟前
Vue3 父子组件传值, 跨组件传值,传函数
前端·javascript·vue.js
charlee441 小时前
使用Vite创建一个动态网页的前端项目
前端·javascript·vite
SnowDreamXUE2 小时前
快速搭建一个electron-vite项目
前端·electron
gxn_mmf2 小时前
典籍知识问答模块AI问答bug修改
前端·javascript·后端·bug
说码解字2 小时前
Kotlin 协程
java·前端·kotlin