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月前
|
移动开发 JavaScript 前端开发
分享88个表单按钮JS特效,总有一款适合您
分享88个表单按钮JS特效,总有一款适合您
31 1
|
3月前
|
存储 移动开发 JSON
分享86个表单按钮JS特效,总有一款适合您
分享86个表单按钮JS特效,总有一款适合您
33 1
|
4月前
|
JavaScript 前端开发 算法
JavaScript中的排他算法实现按钮单选
JavaScript中的排他算法实现按钮单选
20 0
|
4月前
|
JavaScript 前端开发 小程序
js 实现浏览器下载视频2种方法
js 实现浏览器下载视频2种方法
463 0
|
2月前
|
JavaScript
JS利用时间戳倒计时案例
JS利用时间戳倒计时案例
|
2月前
|
Web App开发 前端开发 安全
编程笔记 html5&css&js 031 HTML视频
编程笔记 html5&css&js 031 HTML视频
|
3月前
|
移动开发 JSON JavaScript
分享76个表单按钮JS特效,总有一款适合您
分享76个表单按钮JS特效,总有一款适合您
30 5
|
4月前
|
移动开发 JavaScript 前端开发
分享75个JS特效倒计时,总有一款适合您
分享75个JS特效倒计时,总有一款适合您
27 0