美文网首页
鸿蒙开发自定义倒计时组件

鸿蒙开发自定义倒计时组件

作者: itfitness | 来源:发表于2023-11-07 14:48 被阅读0次

目录

效果展示

实现代码

@Component
export struct CountdownView{
  private onFinish:() => void
  private startAngle:number = 0
  private duration:number = 3000
  private strokeColor:string
  private onceTime: number
  private progressAngle:number = 360
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private intervalId: number = 0
  updateAnim = ()=>{
    this.context.clearRect(0,0,this.context.width,this.context.height)
    this.context.strokeStyle = this.strokeColor
    this.progressAngle = this.progressAngle - 1
    this.context.lineCap = 'round'
    let lineWidth = this.context.width / 2 / 6
    this.context.lineWidth = lineWidth
    this.context.beginPath()
    let x = this.context.width / 2
    let y = this.context.height / 2
    let radius = this.context.width / 2 - lineWidth / 2
    this.context.font = this.context.width + 'px'
    this.context.textAlign = 'center'
    this.context.textBaseline = 'middle'
    let currentTime = (this.duration - (this.onceTime * (360 - this.progressAngle))) / 1000
    Logger.error("FFFF",currentTime + "")
    let currentShowTime = Math.ceil(currentTime) + ""
    this.context.fillText(currentShowTime, x, y)
    this.context.arc(x, y, radius , this.startAngle, this.progressAngle * Math.PI / 180)
    this.context.stroke()
    if(this.progressAngle <= 0){
      clearInterval(this.intervalId)
      this.onFinish()
      Logger.error("FFFF","结束")
    }
  }

  aboutToAppear(){
    this.onceTime = this.duration / 360
  }

  build(){
    Stack(){
      Canvas(this.context)
        .width("100%")
        .height('100%')
        .onReady(() =>{
          this.updateAnim()
          this.intervalId = setInterval(this.updateAnim,this.onceTime)
        })
    }.width("100%").height("100%")
  }
}

相关文章

  • [小程序][医美]

    组件: 小程序组件开发模板 navbar 顶部导航组件封装原则 倒计时

  • Flutter开发上手,自定义组件 Button Demo

    在实际开发中,如果 Flutter 现有的组件不能满足我们的需求,那么就需要自定义组件。Flutter中自定义组件...

  • 自定义组件的点击事件与传值 --(微信小程序)

    一、自定义组件 官方文档(自定义组件)... 1、新建组件文件夹及组件文件 微信开发者工具—>新建文件右击‘新建c...

  • Angular 5 自定义文件上传组件(三)

    Angular 5 自定义文件上传组件(一)Angular 5 自定义文件上传组件(二)本节内容主要是:开发upl...

  • (八)Component父子关系组件

    本节知识点 组件里面套着组件 概述 在实际开发中我们经常会遇到在一个自定义组件中使用其他自定义组件。这个时候就需要...

  • 组件化开发

    组件化开发思想 标准 分治 重用 组合组件开发规范:Web Components通过封装好功能的定制元素(自定义标...

  • iOS——- 本地组件化开发步骤

    本地组件化开发步骤 本地组件化开发操作步骤: 1、创建工程命令:pod lib create 自定义工程名 2、依...

  • react-native自定义组件

    react native在app开发上的一个优势就是组件化开发,当有了足够多的自定义组件后,可以很方便的将这些组件...

  • vue usePop弹窗控制器

    当UI库弹窗无法满足自定义需求时,需要我们自己开发简单的弹窗组件。弹窗组件与普通业务组件开发没有太大区别,重点在多...

  • Flutter-TweenAnimationBuilder实现隐

    在Flutter开发中,如果想要自定义隐式动画组件,但是不想通过自定义组件的方式实现的时候,我们可以通过Tween...

网友评论

      本文标题:鸿蒙开发自定义倒计时组件

      本文链接:https://www.haomeiwen.com/subject/azlfwdtx.html