首页 > 其他分享 >『江鸟中原』鸿蒙应用开发:实现新闻app

『江鸟中原』鸿蒙应用开发:实现新闻app

时间:2023-12-09 16:05:48浏览次数:31  
标签:江鸟 bar 鸿蒙 app height content width nav font

大家好,我是中原工学院的张迅,以下是我的作业报告:

      已知app主要为用户提供信息,使其能够实现信息流展示、页面跳转、搜索、评论等功能

      这里主要以一款新闻类app为例,展开讲解,如图:

『江鸟中原』鸿蒙应用开发:实现新闻app_鸿蒙

一、观察页面所需要实现的效果:

1.从本地后端获取新闻资讯Feed流  2.切换Teb页签  3.下拉刷新,并获取最新的新闻信  4.点击菜单图标实现页面的切换

二、页面的布局以及所需的组件和标签:

  1. 第一行:顶部logo搜索框
  1. 图片标签
  2. 跑马灯效果的搜索框组件
  3. 文本标签
  1. 第二行:Tab页签
  1. 文本标签
  1. 第三行:新闻列表
  1. 文本标签以及图片标签
  1. 第四行:菜单选则
  1. 文本标签以及图片标签

『江鸟中原』鸿蒙应用开发:实现新闻app_鸿蒙_02

三、所需语言:

『江鸟中原』鸿蒙应用开发:实现新闻app_鸿蒙_03


四、代码编写:

hml部分:

<div  class="container">
       <div  class="header">
              <div  class="Logo">
                     <image src="/common/images/sina-filt.png"></image>
              </div>
              <div  class="search">
                     <search @search="search"></search>
                     <marquee>第一观察|十年档树,总书记赋予绿化新内通</marquee>
                     <text>取消</text>
              </div>
       </div>
       <div  class="nav-bars">
              <div  for="barArray" onclick="changeBar({{$idx)})">
                     <text  class="{{$item.className}}">{{$item.content}}</text>
              </div>
       </div>
       <div  class="news-list">
              <list  @scrollbottom="Lazyload">
                    <list-item  class-"news-item" style-"border-bottom: 1px solid #999;" for="newsData">
                          <div  class="news-List">
                                 <div  class="news-item" tid-"item_id" onclick="toDetail({{$item.item_id}})">
                                        <div  class="nens-left">
                                               <image  if="{{$item.has_image}}" src="{{$iten.large_image_ur1}}"></image>
                                               <image  elif="{{$item.has_video}}" sre="{{$item.video_detail_info.detail_video_large_image.url}}"></image>
                                        </div>
                                        <div  class="news-right">
                                               <text  class="title">{{$item.title}}</text>
                                               <text  class="abstract">{{$iten.abstract}}</text>
                                        </div>
                                 </div>
                          </div>
                    </list-item>
              </list>
       </div>

              <div  class="tabs_container">
              <div  class="tab" for="{{array})" onclick="sendMsg($idx)" >
                     <image  class="tob_inoge" src="{{$item.image2url}}"></image>
                     <text  class="title" else>{{$item.title}}</text>
              </div>
              </div>
</div>

css部分:

.container{
       flex-direction: column; 
       width: 100%;
       scrollbar-width: 0;
}
.header{
       width: 100%;
       flcx-direction: row; 
       height: 8%;
       align-items: center;
       justify-content: space-around;
       background-color: red; 
       position: fixedi;
       top:0;
       z-index:10;
}
header .logo{
       width: 35vp;
       height: 35vp;
}
.header .search{
       width:80%;
       height: 60%;
       position: relative; 
       align-items: center;
}
.search marquee{
       width: 60%;
       font-size: 18fp; 
       color: #333;
       margin-top: 4vp; 
       margin-left: 45vp;
}
v.search text{
       font-size: 17fp; 
       color: #fff;
       margin-left: 15vp; 
       position: absolute; 
       right: 2%; 
       top: 10%;
}

.nav-bars{
       height: 5%;
       background-color: #dcdcdc;
       border-bottom: 1px solid #999;
       flex-direction: row;
       justify-content: space-around; 
       align-items: center; 
       position: fixed; 
       top:60;
       z-index: 10
}
.nav-bar{
       font-size: 15fp; 
       height: 100%;
       border-bottom: 0;
}
.nav-bars .nav-bar_active{
       color: red;
       font-size: 16fp;
       font-weight: 608;
       border-bottom: 1px solid red; 
       height: 100%;
}
.news-list{
       flex-direction: column; 
       padding-bottom: 4%;
}
.news-item{
       flex-direction: row; 
       height: 100vp;
       background-color: azure;
}
.news-item .news-left{
       height:100%; 
       width: 30%;
       padding: 8vp;
}
.news-item .news-right{
       width: 70%;
       flex-direction: column;
       justify-content: space-around;
}
.news-item .title{
       font-size: 15fp; 
       max-lines: 2;
       text-overfLow: ellipsis; 
       text-align: center; 
       color: #de0d2e; 
       font-weight: 600; 
       line-height: 18fp;
}
.news-item .abstract{
       font-size: 12fp;
       text-overfLow: ellipsis; 
       max-lines: 4;
       text-indent: 24fp; 
       line-neight: 16fp;
}
.tabs_container {
       display: flex;
       justify-content: space-around;	
       flex-direction: row; c
       align-items: center;
}
.tabs_container {
       display: flex;
       justify-content: space-around; 
       flex-direction: row; 
       align-items: center; 
       width: 100%; 
       height: 9% ;
       border-top: 1px solid #333;
       position: fixed;
       background-color: #fff; 
       z-index: 10; 
       bottom: 0;
}
.tab{
       flex-direction: column;
       justify-content: space-around; 
       align-items: center;
}
.tab_image{
       height: 26px; 
       width: 26px;
       margin-top: 8px;
}
.title {
       font-size: 15px; 
       font-weight: 500; 
       text-align: center; 
       width: 100%; 
       height: 30%;
       margin-bottom: 3px;
}

js部分:

import router from '@system.router';
import fetch from '@system.fetch'; 
import prompt from '@system,prompt" 
export default {
    data: {
        barArray:[
            {
              content:'热点',
              className:'nav-bar_active'
              },
              {
              content:'社会',
              className:'nav-bar'
              },
              {
              content:'娱乐'
              className:'nav-bar'
              },
              {
              content:'体育'
              className:'nav-bar'
              },
              {
              content:'美文',
              className:'nav-bar'
              },
              {
              content:'科技',
              className:'nav-bar'
              },
              {
              content:'财经',
              className:'nav-bar'
              },
              {
              content:'时尚'
              className:'nav-bar'
              }],

        array:[
            {
                'title':'首页',
                'imageUrl':'/common/images/home.png',
                'image2url':'/common/images/home_active.png'
             },
             {
                'title':'热搜榜',
                'imageUrl':'/common/images/hot.png',
                'image2url':'/common/images/hot_active.png'
             },
             {
                'titte':'我的'
                'imageUrl':'/common/images/user.png',
                'image2url':'/common/images/user_active.png'
             }
        ],
        newsData:[],
        newsDataSlice:[], 
        type:0,
        searchText:' ',
        items_avatar:[],
        flag:true
    },
    changeBar (num){
        this.barArray.forEach(function(v){v.className='nav-bar'}) 
        this.barArray[num].className='nav-bar_active'; 
        this.type=num;
        this. getNews(this.type);
    },
    getNews(type){
        var that=this;
        let url='http://localhost:3001/api/news_list/'+type; 
        fetch.fetch({
        url: url,
        success: function(res) {
            that.newsDataSlice=JSON.parse(res.data).data;//15条数据 
            that.newsData=that.newsDataSlice.slice(0,10);//10条数据 
            that.newsData.forEach(function(v,i){
                that.items_avatar.push(v.media_info.avatar_url);
            }),
            },
            fail: function() {
                console.info("fetch fail");
            },
            complete:function(){
                console.info("fetch complete");
            }
        });
    },
    lazyLoad(){
        if(this.flag){
           prompt.showToast({
               message:"加载数据"
           });
           setTimeout(() =>{
               this.newsData=this.newsDataSlice//15条数据
           },3000);
           this.flag=false//只执行一次
        }
    },
    sendMsg(num){
        num==1?router.replace({uri:'pages/topSearch/topSearch'}): 
        router.replace({uri:'pages/user/user'});
    },
}


五、反思:

       此次项目就此结束,即使实施的时间不是很长,但是这个过程中仍需要一段时间去对鸿蒙开发所涉及到的技术进行学习。在学习的过程中,我逐渐认识得到了我自身存在的一些不足,很显然,该项目仍有很多不成熟,在项目设计过程中有许多技术缺陷存在,以后会继续努力学习,不断完善项目。

标签:江鸟,bar,鸿蒙,app,height,content,width,nav,font
From: https://blog.51cto.com/u_16423863/8749729

相关文章

  • 『江鸟中原』鸿蒙——设计聊天软件界面并实现登录跳转
    环境搭建软件要求 DevEcoStudio版本:DevEcoStudio4.0Beta1BuildVersion:4.0.0.201,builtonJune10,2023。 HarmonyOSSDK版本:APIversion9。硬件要求设备类型:华为手机或运行在DevEcoStudio上的华为手机设备模拟器。HarmonyOS系统:3.1.0DeveloperRelease。简要介......
  • 『江鸟中原』鸿蒙仿汽水音乐应用
    1.引言 在短视频火爆的今天,“刷”成为了老少皆宜的一项消遣娱乐的活动。那音乐能不能刷呢,答案当然是可以的。汽水音乐就实现了这个想法。汽水音乐也是抖音推出的一款音乐软件,因为我平时比较喜欢使用这款软件,这也是我做这个项目主要灵感来源。2.项目背景 自从短视频平台成为音乐......
  • 『江鸟中原』鸿蒙云函数开发
    概括CloudFunctions,是一项Serverless计算服务,提供FaaS(FunctionasaService)能力,一方面云函数将开发测试的对象聚焦到函数级别,可以帮助大幅简化应用开发与运维相关的事务,另一方面可以通过在应用中集成云函数SDK,便捷操作云数据库、云存储等,提升业务功能构建的便利性。云函数可......
  • 『江鸟中原』鸿蒙---CustomDialog
    我是中工的陈金灿,这是我的鸿蒙结课大作业,以下是我的作业报告。自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。一、创建自己第一个自定义弹窗1.1创建自定义弹......
  • javaScript/js 【call,apply,bind】
    在JavaScript中,call、apply和bind都是用于改变函数执行上下文(this的值)的方法。它们在不同的情境下有不同的用途。call方法:call方法允许你调用一个函数,并指定该函数内部的this值,以及将参数以单独的参数传递给函数。functiongreet(name){console.log(`Hello,${name}!Ia......
  • Spring Boot学习随笔- @SpringBootApplication详解、加载绝对路径配置文件、工厂创建
    学习视频:【编程不良人】2021年SpringBoot最新最全教程3.5@SpringBootApplication详解这是一个组合注解,就是由多个注解组成。下列注解红框内称为元注解(jdk提供)@Target:指定注解作用范围@Retention:指定注解什么时候生效重要注解@SpringBootConfiguration:自动配置Spring......
  • Docker - Build an application to an image
    Dockerfile:#BuildstageFROMgolang:1.21.5-alpine3.18ASbuilderWORKDIR/appCOPY..RUNgoenv-wGOPROXY=https://goproxy.io,directRUNgobuild-omainmain.go#RunstageFROMalpine:3.18WORKDIR/appCOPY--from=builder/app/main.COPYapp.env......
  • 自用AI宝藏APP分享-非广告
    我发现了一款AI宝藏APP(豆包,抖音公司出品),我已经使用一周了,爱不释手,它是一个很好的顾问,可以免费咨询法律、医疗、养生、健身,规划等等方面的问题,回答的非常专业,而且有用。是很优秀的生活小助手,出谋划策。已经很多年没有被某一款APP震撼到了,豆包APP,挺让我惊喜的,需要的自取吧(非广告哈......
  • 『江鸟中原』鸿蒙——计算器
    鸿蒙期末大作业1、简介使用开发工具DevEcostudio,用java语言编写一个简单的应用——计算机,本应用能够进行简单的加、减、乘、除混合运算。2、成果展示3、设计计算器各个按钮privatevoidinitData(){if(map==null)map=newHashMap<Component,String>();......
  • uniapp 微信小程序使用canvas
    微信小程序基础库大于2.9.0后,canvas(画布)支持一套新Canvas2D接口(需指定type属性),同时支持同层渲染,原有接口不再维护。在这种情况下使用原有接口会报错,报错例如:1、使用ctx.draw()会报错:drawisnotafunction,原因:新版Canvas2D接口没有draw方法2、使用ctx.setfillStyle......