js实现长按录制视频按钮外部转圈倒计时10秒的效果

简介: js实现长按录制视频按钮外部转圈倒计时10秒的效果

css:

#canvas {
        background-color: #eee;
        border-radius: 50%;
      }
      #record-btn {
        margin-top: 20px;
        padding: 10px;
        border-radius: 5px;
        background-color: #f00;
        color: #fff;
        border: none;
        font-size: 16px;
      }

HTML:

<canvas id="canvas" width="100" height="100"></canvas>
    <button id="record-btn">长按录制</button>

js:

<script>
      let canvas = document.getElementById('canvas');
      let context = canvas.getContext('2d');
      let recordBtn = document.getElementById('record-btn');
      let timer; // 用于记录计时器
      let count = 10; // 计数器,初始值为10秒
      // 绘制外部圆环
      function drawOuterCircle() {
        context.lineWidth = 10;
        context.strokeStyle = '#ccc';
        context.beginPath();
        context.arc(50, 50, 40, 0, Math.PI * 2);
        context.stroke();
      }
      // 绘制内部圆环
      function drawInnerCircle() {
        context.lineWidth = 8;
        context.strokeStyle = '#f00';
        context.lineCap = 'round';
        context.beginPath();
        context.arc(50, 50, 40, -Math.PI / 2, (-Math.PI / 2) + (count / 10) * Math.PI * 2);
        context.stroke();
      }
      // 清除canvas画布
      function clear() {
        context.clearRect(0, 0, canvas.width, canvas.height);
      }
      // 计时器函数
      function startTimer() {
        timer = setTimeout(function() {
          if (count > 0) {
            clear();
            count--;
            drawOuterCircle();
            drawInnerCircle();
            startTimer();
          } else {
            stopTimer();
            recordBtn.innerText = '开始录制';
            // 录制结束后的操作
          }
        }, 1000);
      }
      // 停止计时器函数
      function stopTimer() {
        clearTimeout(timer);
        count = 10;
        clear();
        drawOuterCircle();
      }
      let isRecording = false; // 用于记录是否正在录制
      recordBtn.addEventListener('mousedown', function() {
        if (!isRecording) {
          isRecording = true;
          recordBtn.innerText = '松开结束';
          clear();
          drawOuterCircle();
          startTimer();
          // 开始录制的操作
        }
      });
      recordBtn.addEventListener('mouseup', function() {
        if (isRecording) {
          isRecording = false;
          stopTimer();
          recordBtn.innerText = '开始录制';
          // 结束录制的操作
        }
      });
      drawOuterCircle();
    </script>

现在,当长按录制按钮时,canvas上会绘制一个外部圆环,内部圆环逐渐显示,并倒计时10秒。当用户松开按钮时,计时器停止,内部圆环消失,canvas上只剩下外部圆环。

相关文章
|
3月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园竞赛管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园竞赛管理系统附带文章源码部署视频讲解等
194 63
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的小型医院医疗设备管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的小型医院医疗设备管理系统附带文章源码部署视频讲解等
65 6
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园健康驿站管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园健康驿站管理系统附带文章源码部署视频讲解等
64 5
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的销售项目流程化管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的销售项目流程化管理系统附带文章源码部署视频讲解等
69 3
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的项目申报管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的项目申报管理系统附带文章源码部署视频讲解等
55 3
|
6月前
|
Web App开发 移动开发 前端开发
技术经验分享:canvas+howler.js解决同页面视频、音频同时播放问题
技术经验分享:canvas+howler.js解决同页面视频、音频同时播放问题
173 0
|
4月前
|
前端开发 JavaScript 开发者
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
本文提供了一个前端JS按钮点击事件、弹出式窗口和遮罩层的实战示例,包括HTML、CSS和JavaScript的具体实现代码,以及功能解析,演示了如何实现按钮点击后触发弹窗显示和遮罩层,并在2秒后自动关闭或点击遮罩层关闭弹窗的效果。
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
|
4月前
|
JavaScript 前端开发
使用js生成表格标题、表格内容并且每行附带删除按钮然后插入到页面中
使用js生成表格标题、表格内容并且每行附带删除按钮然后插入到页面中
40 2
|
4月前
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
27 1