当前位置: 首页 > news >正文

使用animation来实现时段的滚动效果

animation可以设置滚动时间的快慢,时间越长,滚动越慢。

结合@keyframes设置横向向左滚动,滚动的开始和滚动的结束。

使用粘性定位,定位第一列和最后一列。

效果图如下:

html代码供大家参考:

<style>
    .wrapper{
        width: 80%;
        height: 300px;
        border: 1px solid #ccc;
    }

    /* 深蓝主题 */
    .data-panel {
      background: #1a365d;
      padding: 5px;
      border-radius: 8px;
      color: white;
      font-family: Arial, sans-serif;
    }
    
    /* 固定列布局 */
    .layout-wrapper {
      display: grid;
      grid-template-columns: 120px 1fr 80px;
      position: relative;
    }
    
    /* 固定列样式 */
    .fixed-column {
      position: sticky;
      z-index: 2;
      background: #2c5282;
      padding: 12px;
      border-bottom: 1px solid #1a365d;
    }
    
    /* 左侧时段列 */
    .time-label {
      left: 0;
      box-shadow: 2px 0 5px rgba(0,0,0,0.3);
    }
    
    /* 右侧汇总列 */
    .summary-col {
      box-shadow: -2px 0 5px rgba(0,0,0,0.3);
    }
    
    /* 无限滚动容器 */
    .scroll-container {
      overflow: hidden;
      position: relative;
      height: 40px;
    }
    
    /* 无限滚动内容 */
    .time-slider {
      display: flex;
      position: absolute;
      white-space: nowrap;
      animation: scroll 20s linear infinite;
    }
    
    @keyframes scroll {
      0% { transform: translateX(0); }
      100% { transform: translateX(-20%); }
    }
    
    /* 时间块样式 */
    .time-block {
      width: 120px;
      padding: 12px;
      border-right: 1px solid #2a4365;
      text-align: center;
      flex-shrink: 0;
    }
    
    /* 数据行公共样式 */
    .data-row {
      display: grid;
      grid-template-columns: 120px 1fr 80px;
      border-bottom: 1px solid #2a4365;
    }
    
    .data-cell {
      width: 120px;
      padding: 12px;
      text-align: center;
    }
    </style>
    <div class="wrapper">
    <div class="data-panel">
      <!-- 表头 -->
      <div class="layout-wrapper">
        <div class="fixed-column time-label">时段</div>
        <div class="scroll-container">
          <div class="time-slider">
            <div class="time-block">08:30-10:30</div>
            <div class="time-block">10:30-12:30</div>
            <div class="time-block">14:30-16:30</div>
            <div class="time-block">16:30-18:30</div>
            <div class="time-block">18:30-20:30</div>
            <div class="time-block">20:30-22:30</div>
            <div class="time-block">22:30-00:30</div>
            <div class="time-block">00:30-02:30</div>
            <div class="time-block">02:30-04:30</div>
            <div class="time-block">04:30-06:30</div>
            <div class="time-block">06:30-08:30</div>
          </div>
        </div>
        <div class="fixed-column summary-col">汇总</div>
      </div>
    
      <!-- 数据行 -->
      <div class="data-row">
        <div class="fixed-column time-label">投入</div>
        <div class="scroll-container">
          <div class="time-slider">
            <div class="data-cell">269</div>
            <div class="data-cell">209</div>
            <div class="data-cell">263</div>
            <div class="data-cell">337</div>
            <div class="data-cell">337</div>
            <div class="data-cell">311</div>
            <div class="data-cell">267</div>
            <div class="data-cell">269</div>
            <div class="data-cell">209</div>
            <div class="data-cell">263</div>
            <div class="data-cell">287</div>
          </div>
        </div>
        <div class="fixed-column summary-col">2159</div>
      </div>
    </div>
     
    </div>
    <script>
    </script>

LayUI模板语法:

<div class="data-panel">
      <!-- 表头 -->
      <div class="layout-wrapper">
		  {{#  layui.each(d.headList, function(index, item){ }}
		   <div class="fixed-column time-label">{{item.time}}</div>
        <div class="scroll-container">
          <div class="time-slider">
			  {{#  layui.each(item.slider, function(index1, item1){ }}
			  <div class="time-block">{{item1}}</div>
			  {{#  }); }}
          </div>
        </div>
        <div class="fixed-column summary-col">{{item.all}}</div>
		  {{#  }); }}
      </div>
      <!-- 数据行 -->
	 {{#  layui.each(d.contentList, function(index, item){ }}
      <div class="data-row">
        <div class="fixed-column time-label">{{item.TIME}}</div>
        <div class="scroll-container">
          <div class="time-slider">
			  {{#  layui.each(item.SLIDER, function(index1, item1){ }}
			    <div class="data-cell">{{item1}}</div>
			   {{#  }); }}
          </div>
        </div>
        <div class="fixed-column summary-col">{{item.ALL}}</div>
      </div>
      {{#  }); }}
    </div>

伪数据:

headList: [{
        time:"时段",
        slider:["08:30-10:30","10:30-12:30","12:30-14:30","14:30-16:30","16:30-18:30","18:30-20:30","20:30-22:30","22:30-00:30","00:30-02:30","02:30-04:30","04:30-06:30","06:30-08:30"],
        all:"汇总"
      }],
	contentList:[
        {
          TIME:"投入",
          SLIDER:["111","222","333","444","555","666","777","777","777","777","777","777"],
          ALL:"5678"
        },
        {
          TIME:"产出",
          SLIDER:["111","222","333","444","555","666","777","777","777","777","777","777"],
          ALL:"5828"
        }
      ]

相关文章:

  • 数据库主从延迟全解析:原因、影响与解决之道
  • [Java基础]StringBuilder解析
  • swift菜鸟教程11-12(数组与字典)
  • 使用django实现windows任务调度管理
  • 怎么样在Windows系统上安装 的 WPS JS 插件
  • AUTO-DL 910B + mindspeed-llm 4层DeepSeek V3微调
  • MQTT的构成、使用场景、工作原理介绍
  • EAL4+ vs EAL7:高安全场景下的等级选择策略
  • 面向对象高级(1)
  • 获取git分支间差异文件列表
  • QEMU学习之路(6)— RISC-V 启动Linux
  • 技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案
  • 蓝桥杯 15g
  • Matlab 电机激励模型和仿真
  • Linux上位机开发实践(mcu模块的补充应用)
  • 【常用功能】下载文件和复制到剪切板
  • Flink的 RecordWriter 数据通道 详解
  • vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值
  • 【2】安装Nodejs-Nodejs开发入门
  • 直播电商革命:东南亚市场的“人货场”重构方程式
  • 微信公众号申请网站/市场营销活动策划方案
  • 做百度网站/公司网站域名续费一年多少钱
  • 燕郊医院网站建设/原创代写文章平台
  • 网站建设设计主要系统/企业推广平台有哪些
  • 高唐做网站建设的公司/湖南seo优化报价
  • 中建八局第一建设有限公司设计院/seoshanghai net