我使用HarmonyOs Next开发了b站的首页

1.实现效果展示: 

2.图标准备

我使用的是iconfont图标,下面为项目中所使用到的图标

3. 代码

(1)Index.ets:

import {InfoTop} from '../component/InfoTop'
import {InfoCenter} from '../component/InfoCenter'
import {InfoBottom} from '../component/InfoBottom'@Entry
@Component
struct Index {@State currentPage:number = 0build(){Column() {InfoTop()InfoCenter()InfoBottom({selectCurrent:this.currentPage})}.width('100%').height('100%')}
}

(2)InfoTop 组件:

import font from '@ohos.font';@Component
export struct InfoTop {aboutToAppear():void{font.registerFont({familyName:'infoTop',familySrc:'/fonts/iconfont.ttf'})}build(){Column(){Row(){Image($r('app.media.avatar')).height(48).width(48).borderRadius(24).margin({right:18})//搜索框Row(){Text('\ue7d2').fontFamily('infoTop').fontSize(20)Text('HarmonyOS Next').textOverflow({overflow:TextOverflow.Ellipsis}).maxLines(1).layoutWeight(1)}.border({width:1}).height(40).layoutWeight(1).padding(10).borderRadius(20)Text('\ue613').fontFamily('infoTop').fontSize(35).margin({left:24,right:18})Text('\ue673').fontFamily('infoTop').fontSize(35)}.width('100%')}.padding(10).width('100%')}
}

(3)InfoCenter组件:

import font from '@ohos.font';
import {HomeRecommend} from './HomeRecommend'
@Component
export struct InfoCenter {aboutToAppear():void{font.registerFont({familyName:'infoCenter',familySrc:'/fonts/iconfont.ttf'})}@State navTop:string[] = ['直播','推荐','热门','动画','影视','新征程']@State selectCurrent:number = 1 //默认为推荐页面@State swiperImg:Resource[] = [$r('app.media.swiper_phone_01'),$r('app.media.swiper_phone_03'),$r('app.media.swiper_phone_00')]@BuildertabNavBuilder(index:number){Text(this.navTop[index]).border({width:{bottom:this.selectCurrent==index?2:0},color:this.selectCurrent==index?'#ffec839a':Color.Black}).fontColor(this.selectCurrent==index ?'#ffec839a':Color.Black).textOverflow({overflow:TextOverflow.Clip}).maxLines(1)}@BuildermoreBuilder(){Column(){Text('\ue643').fontFamily('infoCenter').fontSize(20).backgroundColor(Color.White)}}build(){Column() {Tabs({barPosition:BarPosition.Start}){ForEach(this.navTop,(item:string,index)=>{TabContent(){//内容HomeRecommend()}.tabBar(this.tabNavBuilder(index))if(index == this.navTop.length-1){TabContent(){}.tabBar(this.moreBuilder())}})}.onChange((index:number)=>{if(index == this.navTop.length){console.log('跳转页面')return;}this.selectCurrent = index})}.height('80%').width('100%')}
}

InfoCenter中的HomeRecommend组件

import font from '@ohos.font';interface   recommendData{img:Resourcetitle:stringusername:string
}@Component
export struct HomeRecommend{aboutToAppear():void{font.registerFont({familyName:'recommendChannel',familySrc:'/fonts/iconfont.ttf'})}@State recommendList:recommendData[] = [{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'},{img:$r('app.media.harmonyOs'),title:'使用HarmonyOs Next开发b站首页的推荐,喜欢本期视频的观众朋友,可以关注一下up主',username:'XXX'}]build(){Column(){Swiper(){Image($r('app.media.harmonyOs'))Image($r('app.media.harmonyOs'))Image($r('app.media.harmonyOs'))}.width('100%').height(200).autoPlay(true).interval(2000).margin(10).indicator(Indicator.dot().itemWidth(10).itemHeight(10).color(Color.Gray).selectedItemWidth(10).selectedItemHeight(10).selectedColor(Color.White))List(){ForEach(this.recommendList,(item:recommendData,index)=>{ListItem(){Column(){Image(item.img).width('100%').borderRadius({topRight:10,topLeft:10})Text(item.title).textOverflow({overflow:TextOverflow.Ellipsis}).maxLines(2).width('100%').padding(5)Row(){Row({space:15}){Text('\ue665').fontFamily('recommendChannel').margin({left:11}).fontSize(22)Text(item.username)}Text('\ue75f').fontFamily('recommendChannel')}.margin({top:10}).width('100%').justifyContent(FlexAlign.SpaceBetween)}.backgroundColor(Color.White).width('100%')}})}.padding(2).lanes(2,15)}.backgroundColor('#ffefefef').height('100%').width('100%')}}

(4)InfoBottom组件:

import font from '@ohos.font';interface IBottomNav{title:stringfont:string
}@Component
export struct InfoBottom{aboutToAppear():void{font.registerFont({familyName:'infoBottom',familySrc:'/fonts/iconfont.ttf'})}@Link selectCurrent:number@State bottomNav:IBottomNav[] = [{ title:'首页',font:'\ue61f' },{ title:'动态',font:'\ue625' },{ title:'会员购',font:'\ue601' },{ title:'我的',font:'\ue600' }]@State offsetNav:number = 0@BuilderbottomNavBuilder(item:IBottomNav,index:number){Column(){Text(item.font).fontFamily('infoBottom').fontSize(40)//感觉图标1和图标2都有点细小,进行加粗.fontWeight(index == 0 || index == 1 ? FontWeight.Bold:FontWeight.Normal).fontColor(this.selectCurrent == index ? '#fff162d2':Color.Black)Text(item.title).fontColor(this.selectCurrent == index ? '#fff162d2':Color.Black)}}@BuilderaddBuilder(){Text('\ue696;').fontFamily('infoBottom').fontSize(60).fontColor('#fff162d2')}build(){Column(){Tabs({barPosition:BarPosition.Start}){ForEach(this.bottomNav,(item:IBottomNav,index)=>{TabContent(){}.tabBar(this.bottomNavBuilder(item,index))//放在中间-1之后的第一位位置if(this.bottomNav.length/2 == index + 1){TabContent(){}.tabBar( this.addBuilder())}})}.animationDuration(0).onChange((index:number)=>{if(index == this.bottomNav.length/2 ){//跳转上传页面return;}if(index > this.bottomNav.length/2 ){this.selectCurrent = index - 1}else{this.selectCurrent = index}})}.border({width:{top:1},style:BorderStyle.Dotted}).padding(5).height(80).width('100%')}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mxnet转Onnx 踩坑记录

0. 前言 使用将MXNET模型转换为ONNX的过程中有很多算子不兼容,在此对那些不兼容的算子替换。在此之前需要安装mxnet分支v1.x版本作为mx2onnx的工具,git地址如下: mxnet/python/mxnet/onnx at v1.x apache/mxnet GitHub 同时还参考了如下…

【postgresql】 基础知识学习

PostgreSQL是一个高度可扩展的开源对象关系型数据库管理系统(ORDBMS),它以其强大的功能、灵活性和可靠性而闻名。 官网地址:https://www.postgresql.org/ 中文社区:文档目录/Document Index: 世界上功能最强大的开源…

数据结构1:C++实现边长数组

数组作为线性表的一种,具有内存连续这一特点,可以通过下标访问元素,并且下标访问的时间复杂的是O(1),在数组的末尾插入和删除元素的时间复杂度同样是O(1),我们使用C实现一个简单的边长数组。 数据结构定义 class Arr…

web零碎知识2

不知道我的这个axios的包导进去没。 找一下关键词: http请求协议:就是进行交互式的格式 需要定义好 这个式一发一收短连接 而且没有记忆 这个分为三个部分 第一个式请求行,第二个就是请求头 第三个就是请求体 以get方式进行请求的失手请求…

Vatee万腾平台:智慧生活的无限可能

在科技日新月异的今天,我们的生活正被各种智能技术悄然改变。从智能家居到智慧城市,从个人健康管理到企业数字化转型,科技的力量正以前所未有的速度渗透到我们生活的每一个角落。而在这场智能革命的浪潮中,Vatee万腾平台以其卓越的…

Swagger php注解常用语法梳理

Swagger php注解常用语法梳理 快速编写你的 RESTFUL API 接口文档工具,通过注释定义接口和模型,可以和代码文件放置一起,也可以单独文件存放。 Swagger 优势 通过代码注解定义文档,更容易保持代码文档的一致性模型复用&#xff0…

C++(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例

C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例 文章目录 C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例1、概述2、实现效果3、主要代码4、源码地址 更多精彩内容👉个人内容分类汇总 👈👉GIS开发 👈 1、概述 支持多线程加…

【十三】图解 Spring 核心数据结构:BeanDefinition 其二

图解 Spring 核心数据结构:BeanDefinition 其二 概述 前面写过一篇相关文章作为开篇介绍了一下BeanDefinition,本篇将深入细节来向读者展示BeanDefinition的设计,让我们一起来揭开日常开发中使用的bean的神秘面纱,深入细节透彻理解…

第9章 项目总结01:项目流程,每个模块的介绍

1 请介绍一下你的项目 学成在线项目是一个B2B2C的在线教育平台,本项目包括了用户端、机构端、运营端。 核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。 下图是项目的功能模块图: 项目采用前后端分离的技…

去除gif动图背景的工具网站

选择视频或GIF - 取消屏幕 (unscreen.com)https://www.unscreen.com/upload

24-7-6-读书笔记(八)-《蒙田随笔集》[法]蒙田 [译]潘丽珍

文章目录 《蒙田随笔集》阅读笔记记录总结 《蒙田随笔集》 《蒙田随笔集》蒙田(1533-1592),是个大神人,这本书就是250页的样子,但是却看了好长好长时间,体会还是挺深的,但看的也是不大仔细&…

【TORCH】绘制权重分布直方图,权重torch.fmod对torch.normal生成的随机数进行取模运算

要绘制上述代码中权重初始化的分布,可以分别展示每一层初始化权重的直方图。我们将用 torch.fmod 对 torch.normal 生成的随机数进行取模运算,确保权重值在 -2 到 2 之间。 含义解释 torch.normal(0, init_sd, size...):生成服从均值为 0、…

以黑盒与白盒的角度分析和通关xss-labs(XSS漏洞类型与总结)

目录 目录 前言 XSS漏洞的总结和梳理 1.第一关(基础palyload) 黑盒测试 白盒测试 2.第二关(闭合) 黑盒测试 白盒测试 3.第三关(字符转义) 黑盒测试 白盒测试 4.第四关(字符过滤或替换) 黑盒测试 白盒测试 5.第五关(关键词替换) 黑盒测试 白盒测试 6.第六关(…

el-table实现固定列,及解决固定列导致部分滚动条无法拖动的问题

一、el-table实现固定列 当数据量动态变化时&#xff0c;可以为 Table 设置一个最大高度。 通过设置max-height属性为 Table 指定最大高度。此时若表格所需的高度大于最大高度&#xff0c;则会显示一个滚动条。 <div class"zn-filter-table"><!-- 表格--…

AI对于高考和IT行业的深远影响

目录 AI对IT行业的冲击及深远影响1. 工作自动化2. 新的就业机会3. 行业融合4. 技术升级和创新5. 数据的重要性 IT行业的冬天要持续多久&#xff1f;大学的软件开发类专业是否还值得报考&#xff1f;其他问题IT行业是否都是加班严重&#xff1f;35岁后就业困难是否普遍现象&…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

springcloud-alibba之FeignClient

代码地址&#xff1a;springcloud系列: springcloud 组件分析拆解 1.FeignClient的集成 springboot版本&#xff1a;3.1.5 springcloud组件版本&#xff1a;2022.0.4 nacos客户端的版本&#xff1a;2.3.2 1.引pom 这里引入了nacos和feginclient的版本 <dependency>…

【MySQL】事务四大特性以及实现原理

事务四大特性 原子性&#xff08;Atomicity&#xff09; 事务中的所有操作要么全部完成&#xff0c;要么全部不执行。如果事务中的任何一步失败&#xff0c;整个事务都会被回滚&#xff0c;以保持数据的完整性。 一致性&#xff08;Consistency&#xff09; 事务应确保数据库…

机器学习——决策树及其可视化

1、决策树概念 顾名思义&#xff0c;决策树是利用数据结构中树结构来进行判断&#xff0c;每一个结点相当于一个判断条件&#xff0c;叶子结点即是最终的类别。以鸢尾花为例&#xff0c;可以得到如下的决策树&#xff1a; 2、决策树分类的依据是什么&#xff1f; 根据前面分…

跨越语言的界限:Vue I18n 国际化指南

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 国际化简介 vue-i18n 安装和配置 创建语言包 基本使用 切换语言 动态翻…