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

建网站知乎怎么样上传网站资料

建网站知乎,怎么样上传网站资料,wordpress 优化,石家庄城乡建设局网站​ 大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,欢迎关注! 今天是教师节,教师是我最尊敬的职业。感恩一路走来遇到的引路人、一日为师、终身难…

大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,欢迎关注!

今天是教师节,教师是我最尊敬的职业。感恩一路走来遇到的引路人、一日为师、终身难忘!今天,我来手搓一个教师节贺卡,送给天下所有的老师。

一、需求设计

1、实现效果

请添加图片描述

包含动画效果:

  • 顶部一架纸飞机从左到右不断飞行;

  • 中间文字以打字机效果呈现;

  • 底部爱心不断上下跳跃

2、技术分析

整体采用一张图片作为背景;中间文字部分通过定时器输出文字,实现打字机效果;底部爱心是一个自定义图形,通过ArkUI提供的自定义绘制组件Canvas来实现心形绘制,再结合ArkUI提供的动画功能实现心形上下跳动效果。

二、界面制作

1、布局分析

请添加图片描述

2、界面制作

使用DevEco Studio创建项目,将teacher_bg.gif 背景图片拷贝到resources/base/media目录下。

2.1 制作主界面

在项目pages目录下新建文件:TeachersDay.ets,内容如下:

@Entry
@Component
struct TeachersDay {build() {Stack({ alignContent: Alignment.Center }) {//1、 背景图Image($r('app.media.teacher_bg')).width('100%').height('120%')//2、 文本Text("三尺讲台,一柄戒尺\n回首只闻桃李芬芳\n老师,谢谢你的精心教导").fontSize(26).fontWeight(FontWeight.Bold).fontColor(Color.White).lineHeight(40)//行高.letterSpacing(2) //字间距//3、 心形//todo:封装心形组件,减少主文件代码}.width('100%').height('100%').expandSafeArea([SafeAreaType.SYSTEM]) //去白边}
}

这样就实现了界面主体框架,接下来通过Canvas绘制底部的心形图。

2.2 制作心形组件

为了方便代码复用,同时减少主界面代码,讲心形组件单独疯转到自定义组件中。

在ets目录下新建view目录,用于存放自定义组件。在view目录下新建心形组件,HeartCom.ets文件,内容如下:

// 爱心组件
@Component
export struct HeartCom{private seetings:RenderingContextSettings =new RenderingContextSettings(true)private ctx:CanvasRenderingContext2D=new CanvasRenderingContext2D(this.seetings)private screenX:number=0 //画布长private screenY: number = 0 //画布宽startY: number = 0 //爱心区域最低位置Y坐标endY: number = 0 //爱心区域最高位置Y坐标shortSide: number = 0 //爱心区域边长build(){Flex({direction: FlexDirection.Column,alignItems: ItemAlign.Center,justifyContent: FlexAlign.Center}){Canvas(this.ctx).width('100%').height('100%').backgroundColor(Color.Transparent).onReady(() => {let can = this.ctx// 画布赋值this.screenX = can.widththis.screenY = can.heightthis.startY = (this.screenY - this.screenX) / 2this.endY = this.screenX + (this.screenY - this.screenX) / 2this.shortSide = this.screenX// 绘制爱心(控制关键几个点的位置)can.fillStyle = "#ff0000"can.moveTo(this.screenX / 2, this.startY + this.shortSide / 3)can.bezierCurveTo(this.screenX / 6, this.startY, 0, this.screenY / 2, this.screenX / 2,this.endY - this.shortSide / 6)//立体效果let grad = can.createLinearGradient(0, 0, this.screenX, this.endY)grad.addColorStop(0.0, '#fd0000')grad.addColorStop(1.0, '#ffffff')can.fillStyle = gradcan.fill()can.beginPath()can.moveTo(this.screenX / 2, this.startY + this.shortSide / 3)can.bezierCurveTo(this.screenX * 5 / 6, this.startY, this.screenX, this.screenY / 2, this.screenX / 2,this.endY - this.shortSide / 6)can.fill()})}}
}

在该组件中,使用Canvas组件完成心形绘制,并通过export导出组件,以便供其它组件使用。

接下来,在主界面中中引入该组件,并将其显示到主界面中。主界面TeachersDay.ets文件做如下修改:

import { HeartCom } from '../view/HeartCom'
...//3、 心形//todo:封装心形组件,减少主文件代码HeartCom().width(150).height(150).margin({ top: 400 })
...

至此,完成静态的界面制作。

三、功能实现

1、打字机效果

接下来,将主界面中间的文字添加打字机效果(一个字一个字的输出)。

修改主界面,将显示文本存放到变量,并通过定时器取文本进行显示。文件TeachersDay.ets修改如下:

@State message?: string = "" //打印文本
intervalID?: number //定时器...
//2、 文本
Text(this.message)
...onPageShow() {this.printer() //触发打字
}// 打字机效果private printer() {let data = "三尺讲台,一柄戒尺\n回首只闻桃李芬芳\n老师,谢谢你的精心教导"let position: number = 0this.intervalID = setInterval(() => {position = position + 1this.message = data.substring(0, position)if (this.message.length >= data.length) {clearInterval(this.intervalID)}}, 400)}

以上代码将界面显示的文本存放到状态变量message,封装printer函数通过定时器setInterval实现每400毫秒打印一个字符。在页面显示的周期函数onPageShow中触发打字操作。

这样,就实现了文本打字机效果。

2、心形动画

接下来,通过设置动画效果,让底部的心形上下跳动起来。

在TeachersDay.ets文件中,找到心形组件HeartCom,为其设置animation动画属性实现动画效果。TeachersDay.ets文件修改内容如下:

...
@State initSize: number = 400
@State flag: boolean = false
...//3、 心形HeartCom().width(150).height(150).margin({ top: this.initSize }).animation({iterations: 1,duration: 1000,curve: this.flag ? Curve.LinearOutSlowIn : Curve.FastOutLinearIn,playMode: PlayMode.Alternate,onFinish: () => {if (this.flag) {this.initSize = 400this.flag = false} else {this.initSize = 500this.flag = true}}})...onPageShow() {this.initSize = 500 //触发动画}
...

通过initSize记录心形组件初始margin值,在onPageShow周期函数中将其值设置为500,表示初始时心形组件距离顶部400,页面显示时向下移动至500,这就让margin属性产生了变化。而心形组件通过animation属性设置了属性动画,就会让这一变化产生从上往下的动画效果。在属性动画中,通过控制flag的值来让心形组件不断进行上下跳动,从而实现不停跳跃的动画效果。

至此、教师节贺卡动画功能实现。

《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,欢迎关注!

http://www.dtcms.com/a/398816.html

相关文章:

  • jupyter notebook 使用集锦(持续更新)
  • 部署开源PPTagent 生成工具
  • Python的大杀器:Jupyter Notebook处理.ipynb文件
  • 物流网站建设与管理规划书七牛wordpress插件
  • 【同源策略】跨域问题解决方法(多种)
  • 【数据结构】链表 --- 单链表
  • ArcGIS JSAPI 高级教程 - 自由绘制线段、多边形
  • 【2025最新】ArcGIS 点聚合功能实现全教程(进阶版)
  • Express使用教程(二)
  • 大模型部署基础设施搭建 - Docker
  • 芜湖建设机械网站企业管理系统软件下载
  • 永嘉县住房和城乡规划建设局网站自助贸易网
  • 华为云学习笔记(1):ECS 实例操作与密钥登录实践
  • 有一次django开发实录
  • RISC-V 中的 Wait For Interrupt 指令 (wfi) 详解
  • 前端核心框架vue之(指令案例篇1/5)
  • 企业静态网站源码增城建设局网站
  • 网站兼容9公司logo和商标一样吗
  • 题解:AT_abc206_e [ABC206E] Divide Both
  • 链改2.0总架构师何超秘书长重构“可信资产lPO与数链金融RWA”
  • 网站开发技术包括网站建设专业培训
  • 无人机航拍WiFi图传模块,16公里实时高清图传性能和技术参数
  • 视频元素在富文本编辑器中的光标问题
  • 企业网站内容如何搭建推荐做木工的视频网站
  • grounding dino 源码部署 cuda12.4 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)模型
  • 一个虚拟主机可以做几个网站吗毕设做网站心得体验
  • Spring使用SseEmitter实现后端流式传输和前端Vue数据接收
  • 湖南省新闻最新消息十条深圳seo网站推广方案
  • 语音交互接待服务机器人深度推荐
  • 创建学校网站吗网站搭建工具的种类