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

沈阳军成网站建设怎样自己搭建网站

沈阳军成网站建设,怎样自己搭建网站,网站权重高 做别的关键词,有人看片吗免费观看背景 由于原生的时间选择器(DatePicker)不能满足UI的设计要求,比如:会自带分割线;无法调节各选择项高度等限制,虽然也无法理解TextPicker已有的属性,DatePicker上竟然没有。因此,想…

背景

由于原生的时间选择器(DatePicker)不能满足UI的设计要求,比如:会自带分割线;无法调节各选择项高度等限制,虽然也无法理解TextPicker已有的属性,DatePicker上竟然没有。因此,想着使用三个TextPicker组合成一个时间选择器,后期还可以做更多的设置,可以只选择月份和日期等。

实现效果

请添加图片描述

实现思路

  • 封装时间滑动组件,实现月份变化时,结合年份动态改变日期集合
  • 封装按钮控件,添加上点击下翻的动画和整体控件高度的变化

MyTimePicker

提供了开始时间、结束时间、选择日期属性可以给父级构件进行调用。为了统一三个TextPicker样式,封装了MyPicker公用样式,后续需要统一修改他们的样式可以直接在这里面添加。

@ComponentV2
export struct MyTimePicker {@Param Start: Date = new Date('1970-1-1')@Param End: Date = new Date('2100-12-31')@Param SelectDate: Date = new Date()@Local Years: number[] = []@Local Months: number[] = []@Local Days: number[] = []@Local YearSelectIndex: number = 0@Local MonthSelectIndex: number = 0@Local DaySelectIndex: number = 0aboutToAppear(): void {this.Years =Array.from<number, number>({ length: this.End.getFullYear() - this.Start.getFullYear() + 1 },(_, k) => this.Start.getFullYear() + k)this.Months = Array.from<number, number>({ length: 12 }, (_, k) => k + 1)this.UpdateDaysInMonth(this.SelectDate.getFullYear(), this.SelectDate.getMonth() + 1);this.SelectIndexInit();}build() {Row() {// 年份选择TextPicker({ range: this.Years.map(x => `${x}`), selected: this.YearSelectIndex }).onChange((value, index) => {const newYear = this.Years[index as number]this.SelectDate.setFullYear(newYear)this.UpdateDaysInMonth(newYear, this.SelectDate.getMonth() + 1)}).MyPicker()// 月份选择TextPicker({ range: this.Months.map(v => `${v}`), selected: this.MonthSelectIndex }).onChange((value, index) => {if (index as number || index == 0) {const newMonth = index as number + 1this.SelectDate.setMonth(newMonth - 1)this.UpdateDaysInMonth(this.SelectDate.getFullYear(), newMonth)}}).MyPicker()// 日期选择TextPicker({ range: this.Days.map(x => `${x}`), selected: this.DaySelectIndex }).onChange((value, index) => {console.info(index.toString())this.SelectDate.setDate(index as number + 1)}).MyPicker()}.height('100%').width('100%')}/*** 选择索引初始化*/private SelectIndexInit() {let yearIndex: number = this.Years.findIndex((value: number) => {return this.SelectDate.getFullYear() == value});let monthIndex: number = this.Months.findIndex((value: number) => {return this.SelectDate.getMonth() + 1 == value});let dayIndex: number = this.Days.findIndex((value: number) => {return this.SelectDate.getDate() == value});this.YearSelectIndex = yearIndex;this.MonthSelectIndex = monthIndex;this.DaySelectIndex = dayIndex;}private UpdateDaysInMonth(year: number, month: number) {const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];if (month === 2 && this.IsLeapYear(year)) {this.Days = Array.from<number, number>({ length: 29 }, (_, i) => i + 1); // 闰年2月有29天} else {this.Days = Array.from<number, number>({ length: daysInMonth[month - 1] }, (_, i) => i + 1);}let dayIndex: number = this.Days.findIndex((value: number) => {return this.SelectDate.getDate() == value});this.DaySelectIndex = dayIndex;}/*** 判断是否是闰年* @param year* @returns*/private IsLeapYear(year: number): boolean {return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);}
}@Extend(TextPicker)
function MyPicker() {.divider(null).layoutWeight(1).selectedTextStyle({color: Color.Black,font: {weight: FontWeight.Bold}})
}

DatePickButton

为了实现组件的复用,把标题也封装进来。这里需要注意的点是,这里使用了dayjs第三方库,需要提前引用第三方库哈。

import dayjs from "dayjs"
import { MyTimePicker } from "./MyTimePicker"@ComponentV2
export struct DatePickButton {@Param Title: string = "开始时间:"@Param SelectDate: Date = new Date()@Local IsPickerShow: boolean = falsebuild() {RelativeContainer() {Text(this.Title).fontSize(20).fontWeight(FontWeight.Bold).id("Title")Button() {Row() {Text(dayjs(this.SelectDate).format("YYYY 年 MM 月 DD 日 ")).fontSize(18)Path().width(30).height(30).commands(`M${vp2px(7.5)} ${vp2px(10)} L${vp2px(15)} ${vp2px(20)} L${vp2px(22.5)} ${vp2px(10)} Z`).rotate(this.IsPickerShow ? {centerX: "50%",centerY: "50%",angle: 180} : {angle: 0})}.alignItems(VerticalAlign.Center).justifyContent(FlexAlign.SpaceBetween)}.border({color: Color.Black,width: 2,radius: 15}).backgroundColor(Color.White).type(ButtonType.Normal).height(40).margin({ left: 5 }).padding({ left: 15, right: 15 }).alignRules({left: { anchor: "Title", align: HorizontalAlign.End },center: { anchor: "Title", align: VerticalAlign.Center }}).onClick(() => {animateTo({ duration: 100 }, () => {this.IsPickerShow = !this.IsPickerShow;})}).id("PickerBtn")MyTimePicker({SelectDate: this.SelectDate}).height(this.IsPickerShow ? 150 : 0).margin({ top: 10 }).alignRules({top: { anchor: "PickerBtn", align: VerticalAlign.Bottom },left: { anchor: "Title", align: HorizontalAlign.Start },right: { anchor: "PickerBtn", align: HorizontalAlign.End }}).id("DatePicker")Rect().width("100%").height(this.IsPickerShow ? 35 : 0).radiusWidth(20).fill("#56FFEB").fillOpacity(0.5).stroke(Color.Black).strokeWidth(2).alignRules({middle: { anchor: "DatePicker", align: HorizontalAlign.Center },center: { anchor: "DatePicker", align: VerticalAlign.Center },})}.height(this.IsPickerShow ? 200 : 50).width("100%").padding({ left: 15, right: 15 })}
}

Index

在主页面中使用时间选择组件

import { DatePickButton } from './DatePickButton'@Entry
@ComponentV2
struct Index {@Local StartDate: Date = new Date()@Local EndDate: Date = new Date()build() {Column({ space: 5 }) {DatePickButton({Title: "开始时间:",SelectDate: this.StartDate})DatePickButton({Title: "结束时间:",SelectDate: this.EndDate})}.padding({ top: 20 }).height('100%').width('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Start)}
}

总结

主要实现了UI需要的没有分割线的时间选择器,而且可以有更多自定义空间,但是也会受限于TextPicker的能力范围,但是现阶段基本能满足使用需求了。希望这篇文章可以帮到你~~


文章转载自:

http://RDHDYPOe.brkrt.cn
http://IOWg84Cw.brkrt.cn
http://p1a2is03.brkrt.cn
http://kwRXYM8X.brkrt.cn
http://MxQiSSFa.brkrt.cn
http://TdBc4mdd.brkrt.cn
http://ZKRKMlpS.brkrt.cn
http://fLlUjxmj.brkrt.cn
http://Xd4CQpfs.brkrt.cn
http://3XrnUuom.brkrt.cn
http://PgiBuHM0.brkrt.cn
http://ybVEK7Jn.brkrt.cn
http://38xG86ev.brkrt.cn
http://vEkeFwnS.brkrt.cn
http://GJ7Bvzx2.brkrt.cn
http://qgwufRSH.brkrt.cn
http://0WUD0kN6.brkrt.cn
http://fLvG1QFy.brkrt.cn
http://bVcnWVKG.brkrt.cn
http://NEhiQCqj.brkrt.cn
http://jmDh2oSK.brkrt.cn
http://mqCCNjoZ.brkrt.cn
http://A7NHuqGj.brkrt.cn
http://aIYM5yTA.brkrt.cn
http://ccAzF8T5.brkrt.cn
http://FYaBvAZM.brkrt.cn
http://WqJwp72c.brkrt.cn
http://c342B9Fc.brkrt.cn
http://L5dU3YTI.brkrt.cn
http://OMn4MZTW.brkrt.cn
http://www.dtcms.com/wzjs/758420.html

相关文章:

  • 企业建设网站要注意的要素科研网站建设
  • 重庆网站建设公自适应企业网站源码
  • 我的家乡网站建设模板下载wordpress如何调用js
  • 建设银行东莞招聘网站视频网站开发报告
  • 装修设计网站排行榜贵阳做网站的大公司
  • 小榄网站建设推广主要的电子商务网站有哪些
  • 网站建设分几块wordpress 课程系统
  • 网站联盟的收益模式设计师应该关注的网站
  • 色流网站如何做通用ppt模板免费
  • 网站优化价格视频号小店
  • 做网站资料准备北京天津网站建设
  • 网站管理系统后台南阳网站推广招聘
  • 卫浴网站怎么做大学生网页设计个人主页
  • 网站开发者模式下载视频wordpress ajax 搜索
  • 怎么设置网站权限网站建设合同需要交印花税吗
  • 网站域名多少钱一年新网站建设运营年计划
  • .net做的网站怎么样青海省城乡和住房建设厅网站
  • 在微信上怎么做网站做胃镜多少钱天津津门网站I
  • 网站线框图怎样做做流程图用什么网站好
  • 东莞高端网站建设哪个好网站模板怎么改
  • 做网站主页免费建站软件哪个好
  • 网站加载页面怎么做宝塔为什么要安装Wordpress
  • 国内什么网站用asp.net网站建设电脑维修数据恢复
  • 上海做企业网站的公司长沙网络销售公司
  • 国内网站建设代理wordpress menu代码
  • 天马网络网站济南公司做网站的价格
  • wordpress相册移植typecho清远网站seo
  • 海口网站排名推广青县有做网站的吗
  • 创建私人网站备案网站名
  • 做直播信号网站网站建设行业发展状况