手写带时间段切割的进度条

手摸手教你做一个分段式进度条组件 Eason最近遇到一个需求,需要去展示分段式的进度条,为了给这个进度条想要的外观和感觉,在构建用户界面 (UI) 时,大家通常会依赖 SDK 提供的可用工具并尝试通过调整SDK来适配当前这个UI需求;但悲伤的是,大多数情况下它基本不符合我们的预期。所以Eason决定自己绘制它。 创建自定义视图 在 Android 中要绘制自定义动图,大家需要使用Paint并根据Path对象引导绘制到画布上。 我们可以直接在画布Canvas中操作上面的所有对象View。更具体地说,所有图形的绘制都发生在onDraw.. 阅读详情

效果图:

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
   <title>带时间段切割的进度条</title>
   <link rel="stylesheet" href="../../src/font-awesome/css/font-awesome.min.css">
   <style type="text/css">
      #progress_box{
         width: 500px;
         height: 20px;
         border: 1px solid  #ddd;
         display: flex;
         justify-content: center;
      }
      .startTime,.endTime{
         flex: 0 0 80px;
         width: 80px;
         text-align: center;
      }

      .progress-wrapper{
         flex: 1;
         position: relative;
         float:left;
         height: 20px;
      }
      .progress_bg{
         position: absolute;
         top:0;
         left: 0;
         height: 20px;
         width: 100%;
         border: 1px solid #ddd;
         border-radius: 5px;
         overflow: hidden;
         cursor: pointer;
         background-color:rgba(33,148,255,0.4);
         z-index: 9999;
      }
      .progress_hover_time{
         position: absolute;
         display: none;
         top:0;
         left: 0;
         width: 60px;
         height: 20px;
      }
      .progress_time{
         display: none;
         width: 100px;
         height: 20px;
         border-radius: 5px;
         position: absolute;
         background:transparent;
         left:0;
         top:0;
         cursor: pointer;
         border:1px #ddd solid;
         box-sizing:border-box;
         z-index: 500;
      }
      .progress_time:hover{
         border-color:#F7B824;
      }

   </style>
</head>
<body style="background-color: #fff;">
<div id="videobox">
   <div id="progress_box">
      <div class="startTime">12:00:00</div>
      <div class="progress-wrapper">
         <div class="progress_bg">
            <div class="progress_hover_time">12:00:00</div>
         </div>
         <div class="progress_time">
            <i class="fa fa-thumb-tack fa-lg" style="width: 20px;height: 20px"></i>
            <span id="progress_time">12:00:00</span>
         </div>

      </div>
      <div class="endTime">12:30:00</div>
   </div>
</div>


<script src="../../src/bootstrap/js/jquery-1.11.3.js"></script>
<script type="text/javascript">
  $(function(){
    var  tag = false,ox = 0,left = 0; //tag为鼠标确认事件标注ox鼠标拖动起点位置,left为鼠标进度条移动距离
     var moveFlag=false;
    var  bar_width=parseInt($('.progress_bg').width());
    var  bgleft = $('.progress_bg').offset().left;
    var timeleft=left; //默认时间显示位置和进度位置相同
   var allTime=30*60*1000;
   var beginTime=new Date("2019/3/4 12:00:00").getTime();
      $('.progress_bg').mouseenter(function (e) {
       console.log("mouseenter");
          moveFlag=true;
      }).mousemove(function (e) {
          console.log('mousemove');
          if(moveFlag){
              left = e.pageX - bgleft;
              console.log('left'+left+'bgleft'+bgleft+'e.pageX '+e.pageX );
              bgleft = $('.progress_bg').offset().left;
              left = e.pageX - bgleft;
              console.log('left'+left+'bgleft'+bgleft+'e.pageX '+e.pageX )
              if (left <= 0) {
                  left = 0;
              }else if (left > bar_width) {
                  left = bar_width;
              }
              console.log("beginTime"+beginTime);
              var timeShow=toLocaleDateString(((left/bar_width)*allTime) + beginTime);
              $('.progress_hover_time').text(timeShow);
              if(left>bar_width-60){
                  var offsetleft=bar_width-60;
                  $('.progress_hover_time').css("left",offsetleft+"px");
           }
           else{
                  $('.progress_hover_time').css("left",left+"px");

              }
              $('.progress_hover_time').css("display","block");

          }

      }).mouseleave(function (e) {
          moveFlag=false;
          console.log("mouseleave");
      });
    $('.progress_bg').mousedown(function () {
      tag = false;
      console.log('click+mousedown'+tag);
    }).mouseup(function () {
      console.log('click+mouseup')
    }).click(function(e) {//鼠标点击
      if (!tag) {
        bgleft = $('.progress_bg').offset().left;


        left = e.pageX - bgleft;
        console.log('bar_width'+bar_width+'timeleft'+timeleft+'left'+left+'bgleft'+bgleft+'e.pageX '+e.pageX )
        if (left <= 0) {
          left = 0;
        }else if (left > bar_width) {
          left = bar_width;
        }
          var timeShow=toLocaleDateString(((left/bar_width)*allTime) + beginTime)
          $('#progress_time').text(timeShow);
        if(left>bar_width-90){
            var offsetleft=bar_width-90;
              $('.progress_time').css('left', offsetleft);

          }
        else {
              $('.progress_time').css('left', left+"px");

          }
          $('.progress_time').css('display', "block");
          $('.progress_hover_time').css("display","none");

          console.log('click')
      }
    });
    function stopEvent(event){ //阻止冒泡事件
      //取消事件冒泡
      var e=arguments.callee.caller.arguments[0]||event; //若省略此句,下面的e改为event,IE运行可以,但是其他浏览器就不兼容
      if (e && e.stopPropagation) {
        // this code is for Mozilla and Opera
        e.stopPropagation();
      } else if (window.event) {
        // this code is for IE
        window.event.cancelBubble = true;
      }
    }
  });

  function toLocaleDateString (ms) {
      var date=new Date(ms);
      return  addZero(date.getHours())+":"+addZero(date.getMinutes())+":"+addZero(date.getSeconds());
  }
  function addZero(num) {
      if(num<10)
          return "0" + num;
      return num;
  }
</script>
</body>
</html>

 

6个非常经典Web前端使用的炫丽进度条(四) 在线效果:http://ynif.v099.10000net.cn/demo/jindu/4/jindu/index.html 立即下载

相关推荐

6个非常经典Web前端使用的炫丽进度条(一)

在线效果:http://ynif.v099.10000net.cn/demo/jindu/1/jindu/index.html

前端 实现数据的分批加载

UNI-APP上拉分段加载数据 当服务端数据没有进行分页处理时,ajax请求一次接口返回所有的数据;当请求数据过多的时候页面渲染会非常慢,并且很容易造成页面卡死现象;因此,前端可以通过js进行分页,达到分批加载数据的目的。 思路: 1、获取数据的分段处理   (1)无数据 不显示加载状态栏 显示无数据信息提示   (2)有数据 动态设置API参数取值 加载数据时动态改变API参数值,这里设置time来控制,追加数据时time++,确保查询的追加数据条数比上次获取的数据多十条。 分段截取数据

织网的博客 4399

带剩余时间的进度条窗体

带剩余时间的进度条窗体的源代码 .

vue 分段进度条组件

可随意指定刻度数与百分比的进度条

RealizeInnerSelf丶 1249

拉普拉斯矩阵

1、预备知识 拉普拉斯矩阵定义为:L=D-W。其中,D为度矩阵,W为权重矩阵。 (1)D是对角矩阵,对角线上的元素时节点的度,即所有与该节点相关联的边的权重之和;对角线以外的元素为0。有向图的对角矩阵分为 出度矩阵 和 入度矩阵。 图1.1 无向图中的度矩阵 (2)W在无向图中是对称矩阵,在有向图中是非对称矩阵。 ...

zzhe 1万+

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 304

分段式进度条

因为业务需要自己写了个分段式进度条的组件

buxiangxiezye_的博客 721

数字IC后端时钟树综合实战:OCC电路优化与时钟树平衡策略

本文深入探讨了数字IC后端设计中时钟树综合的关键挑战,重点分析了OCC电路时钟树优化的必要性。通过实战案例,详细阐述了如何通过手动干预、时钟分组与分段长树等策略,避免工具自动平衡导致的时序违例和资源浪费,从而有效实现时钟树平衡并提升设计质量。

weixin_29306261的博客 325

前端简易实现计划(分阶段)多色进度条

不同阶段的完成时间点(这里以三个阶段举例,依次为备货阶段,装配阶段,测试阶段)如果当前日期小于阶段计划完成时间点,需要将未完成时间点标记出来。将当前日期处于哪个阶段用进度条展示出来。不同的阶段用不同的背景色显示。下面代码以vue为例。

qq_38968222的博客 1777

【数学建模】 进化计算与群体智能

遗传算法(GA)是一种用于优化和搜索问题的启发式算法。它模拟了自然选择的过程,其中个体通过遗传和变异进行繁殖,逐渐进化出更优的解。基本步骤初始化:生成初始种群。适应度评估:评估种群中每个个体的适应度。选择:根据适应度选择个体进行繁殖。交叉:选定个体对进行基因交换,生成新的后代。变异:对一些个体进行基因变异,以增加多样性。迭代:重复评估和繁殖过程,直至达到停止条件。粒子群优化算法(PSO)是一种基于群体智能的优化算法,由Kennedy和Eberhart于1995年提出。其灵感来源于鸟群觅食的行为。

weixin_42914989的博客 1113

光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件

软件界面如下,免安装,拷贝即可使用 导入光谱数据即可计算三刺激值、CIE1931、CIE1976、CCT CIE1931、CIE1976色坐标图形只管显示 导入的光谱数据格式如下,txt文本 波长380到780,间隔1nm 注意:缺省的数据默认写0即可 下面为一些CIE相关介绍: CIE(国际发光照明委员会):原文为Commission Internationale de L’Eclairage(法)或International Commission on Illumination(英)。这个委员会创

业余程序员小徐的博客 2万+

音频切割软件 如何切割音频 切割音频的软件

  不知道大家会不会有一首歌曲,想要把这个歌曲中的好听的部分,单独剪下来,切割下来,然后可以把这个切割下来的部分放进自己拍摄或者是其他视频里作为背景音乐出现,亦或者是把这个切割下来的音频,作为手机的来电铃声使用,那么这样的话,就需要先学会如何截取切割音频咯。   运行迅捷视频转换器,点击视频转换器中多个功能中的第一个“添加文件”功能会出现一个小框,然后我们从电脑中选择需要切割的音频文件,点击...

Tybyqi的博客 1348

threejs中使用Reflector实现出倒影效果,并实现背景透明的效果(Reflector镜面背景透明, 倒影弱化)

在项目中遇到要实现倒影效果,threejs给我们提供了Reflector,可以轻松完成镜面效果,实现倒影。但背景不透明;并且反射出的倒影太亮了;网上没搜到解决方案, 自己修改了下源码实现了想要的效果,做个记录...

weixin_40856652的博客 5720

mediarecorder 录制的文件无法拖动进度条_视频文件过长,怎样剪切长视频文件发微信朋友圈...

相信很多朋友都遇到过这样的问题,由于微信朋友圈最多只能发15秒的短视频,从而导致很多长视频文件不能发朋友圈,那么该怎么办呢?我们可以把长视频文件剪切出最精彩的15秒,这样就可以了,可以使用视频剪切合并器这款软件完成,下面为大家介绍一下这款软件视频剪切合并器是一款目前剪切视频速度最快,支持无损切割视频,最好用的免费视频剪切合并工具。剪切一个100MB大小的视频文件只需要10秒左右时间,是目前最快的视...

weixin_39521651的博客 1121

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

视频分割技术全解析:从FFmpeg无损切割到Python批量自动化

视频分割是多媒体处理中的基础技术,指将长视频按时间轴切割为独立片段。其核心原理是通过解析视频容器格式,对音视频流进行精确的复制与重新封装,实现无损或近无损处理。这项技术的价值在于极大提升了视频内容处理的效率,避免了耗时的手动剪辑。在应用场景上,它广泛服务于内容创作分发、素材管理、广告编辑、自动化归档及AI数据预处理等领域。本文聚焦于FFmpeg工具的无损切割机制和Python脚本的批量自动化实现,通过对比图形化工具、命令行与编程库三种方案,为开发者提供从原理到工程实践的全链路解决方案。

weixin_34319817的博客 384

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

视频文件过长,怎样剪切长视频文件发微信朋友圈

相信很多朋友都遇到过这样的问题,由于微信朋友圈最多只能发15秒的短视频,从而导致很多长视频文件不能发朋友圈,那么该怎么办呢?我们可以把长视频文件剪切出最精彩的15秒,这样就可以了,可以使用视频剪切合并器这款软件完成,下面为大家介绍一下这款软件 视频剪切合并器是一款目前剪切视频速度最快,支持无损切割视频,最好用的免费视频剪切合并工具。剪切一个100MB大小的视频文件只需要10秒左右时间,是目前最快的...

u014316554的博客 761

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

biliLive-tools视频切片技巧:利用弹幕和高能点快速定位精彩片段

biliLive-tools是一款功能强大的直播一站式处理工具,支持直播录制、视频处理、弹幕处理及录播姬自动上传等多种功能。其中视频切片功能尤为实用,能够帮助用户根据弹幕和高能进度条快速定位精彩片段,让视频剪辑变得简单高效。 ## 为什么选择biliLive-tools进行视频切片? 在处理直播视频时,我们常常需要从长达数小时的视频中提取精彩片段,这个过程往往耗时费力。而biliLive-to

gitblog_00995的博客 546

5 步去除 PDF 复制与打印限制:PDFPatcher 完整教程

PDFPatcher(PDF 补丁丁)是一款基于 AGPL 协议开源的免费 PDF 工具箱,可以直接去除 PDF 复制限制和打印限制。它以便携压缩包形式发布:解压后运行,无需安装,超过 2 GB 的大文档也能直接打开修补,处理结果写入新文件,原件保持不变。 ## 能力速览:一个程序覆盖的 PDF 修补场景 | 功能场景 | 说明 | 对应模块 | | --- | --- | --- | | 解

gitblog_00724的博客 69

Fun-ASR VAD检测功能详解:自动分割长音频,处理会议录音更高效

本文介绍了Fun-ASR语音识别系统中的VAD检测功能,该功能可智能分割长音频,高效处理会议录音。用户可在星图GPU平台上自动化部署‘Fun-ASR钉钉联合通义推出的语音识别大模型语音识别系统 构建by科哥’镜像,快速搭建环境,将VAD应用于客服通话质检、会议纪要生成等场景,实现音频内容的结构化与自动化处理。

weixin_42351520的博客 146

mp3剪辑器

mp3剪辑器可以根据个人的喜好对软件任意一段进行截取,也可以对歌曲进行拼接,实现歌曲的无缝拼接,在制作的时候还能够加入淡入淡出,混响效果等歌曲特效。不少喜欢车载音乐的用户都有想要下载一个此类型的软件,可是网络上种类繁多不知道怎么选择,那么小编就来帮你找个忙,给大家提供的是mp3剪辑器免费版,其界面简洁,操作方便,支持无损切割,除了mp3格式外还支持WMA, AMR, AAC,WAV等大部分流行格式,还能对MP3文件进行任意时间段的无损切割,剪切后音质不会降低,能达到原音频的品质,还等什么,快来下载收藏吧。p

qq_48138138的博客 1623

如何用手机计算机弹出音乐,如何使用手机或计算机剪切和拾取音乐?

网易云每个人都知道一个非常流行的音乐播放器. 当我们喜欢要截取的歌曲时,播放器本身不受支持,那么我们如何截获网易云音乐歌曲? ?现在世界上有很多拦截工具,这使我们所有人在选择工具时都感到困惑. 我不知道该选择什么工具. 拦截音频的过程. 易于使用的工具非常重要. 如果您需要全面的功能,那么此操作简单易用,非常适合新手手机上怎么剪切音乐,让我们看不起.工具简介:快速音频转换器它是一种的音频编辑和处理...

weixin_29212867的博客 1118

计算机音乐是哪一个,哪种软件适合音乐编辑的计算机版本?

我们如何编辑音乐?如何在计算机上正确操作编辑的音乐?当我们在日常生活中遇到一些非常神奇的歌曲时,您如何编辑自己喜欢的部分?虽然电话上有很多工具,但也有数不清,但是最好在计算机上操作,这将给我们带来很多效率,并且会更加方便!以下编辑者将与您分享在计算机上进行音频编辑的有用工具,请继续阅读!工具简介:对于计算机使用的编辑工具,小编认为快速音频转换器非常易于使用. 它是一个的音频编辑和处理软件. 该功能...

weixin_33788465的博客 209

计算机主机软件,计算机上提供了哪些软件来编辑音乐

每个人都很了解音乐,通常几乎每天都会欣赏一些优美的歌曲. 一首歌终于献给所有人了. 在将其呈现给所有人之前,还进行了无数次修改. 很遇到自己. 我最喜欢的音乐将选择使用它来制作一些歌曲,作为手机的各种铃声. 这是一件非常有趣的事情,那么计算机上有哪些工具可以用来剪切音乐?往下看,你会知道的.关于该工具:快速音频转换器它是的音频编辑和处理软件. 该软件具有四个功能: 音频剪切,音频提取,音频合并和音...

weixin_30571837的博客 171
上一篇: 设置img.src时报错SCRIPT5:拒绝访问
下一篇: 手写多图片合并成一张图片功能插件(水印合成)
github_39274378
博客等级 码龄9年 13粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值