我使用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: 世界上功能最强大的开源…

PHP期末复习题

一、选择题 1.在下面( A )文件夹里面能找到Apache服务器的配置文件。 A.conf B. bin C.error D. data 2.取余数运算符的符号是( B )。 A. &a…

python 高级技巧 0706

python 33个高级用法技巧 列表推导式 简化了基于现有列表创建新列表的过程。 squares [x**2 for x in range(10)] print(squares)[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]字典推导式 用简洁的方式创建字典。 square_dict {x: x**2 for x in range(10)} print(square_dict){0…

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

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

web零碎知识2

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

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

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

JavaWeb学习------Servlet

目录 request用法response用法sessionServletContext对象 request用法 -常用方法 String uname request.getParameter(); String[] hobbys request.getParameter("hobby");if(hobby ! null && hobby.length > 0) {for ( String hobby : hobbys) {Syst…

Swagger php注解常用语法梳理

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

K8S集群应用国产信创适配实战经验总结

1.信创适配背景 信创国产化是在当前全球化和科技快速发展的背景下提出的。随着信息技术的快速发展,国内对科技产品和服务的需求日益增长,同时,国际局势的动荡和贸易环境的变化也凸显了自主可控和国产化的重要性。此外,国内政策对数…

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的神秘面纱,深入细节透彻理解…

什么是设计模式以及常见的例子(如单例、工厂、观察者等)

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的主要目的是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。设计模式一般包含模式名称、问题、目的、解决方案、效果等基本要…

第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.第六关(…

CSS:选择器 / 14种类型

理解css选择器 CSS选择器是CSS(层叠样式表)中的关键部分,它允许开发者指定哪些HTML元素应该被应用一组特定的样式规则。选择器可以非常具体,只针对一个元素,也可以相当宽泛,影响多个元素。理解CSS选择器对…

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

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