【2024夏季《移动软件开发》实验5】

一、实验目标

1、综合所学知识创建完整的前端新闻小程序项目;

2、能够在开发过程中熟练掌握真机预览、调试等操作。

二、实验步骤

  1. 创建项目:

    创建项目:news,1)在app. json文件 pages属性中继续追加 pages/detail/detail 和 pages/ my/ my;2)再创建以下两个文件夹:

  1. images:用于存放图片素材;
  2. utils:用于存放公共JS文件。
    明确需求:
  3. 首页功能需求如下:(1)首页需要包含幻灯片播放效果和新闻列表;(2)幻灯片至少要有 3 幅图片自动播放;(3)点击新闻列表可以打开新闻全文。
  4. 新闻页功能需求如下:(1)阅读新闻全文的页面需要显示新闻标题、图片、正文和日期;(2)允许 点击按钮将当前阅读的新闻添加到本地收藏夹中;(3)已经收藏过的新闻也可以点击按钮取消收藏。
  5. 个人中心页功能需求如下:(1)未登录状态下显示登录按钮,用户点击以后可以显示微信头像和昵称。(2)登录后读取当前用户的收藏夹,展示收藏的新闻列表。(3)收藏夹中的新闻可以直接点击查看内容。(4)未登录状态下收藏夹显示为空。

  1. 导航栏设计:

       在app.json中自定义导航栏标题和背景颜色,并追加tabBar的相关属性代码,如下:

"pages": [  
    "pages/index/index",  
    "pages/detail/detail",  
    "pages/my/my"  
],  
"window": {  
    "backgroundTextStyle": "light",  
    "navigationBarBackgroundColor": "#328eeb",  
    "navigationBarTitleText": "我的新闻网",  
    "navigationBarTextStyle": "white"  
},  
"tabBar": {  
    "list": [{  
        "pagePath": "pages/index/index",  
        "text": "首页",  
        "iconPath": "images/index.png",  
        "selectedIconPath": "images/index_blue.png"  
    },  
    {  
        "pagePath": "pages/my/my",  
        "text": "我的",  
        "iconPath": "images/my.png",  
        "selectedIconPath": "images/my_blue.png"  
    }  
]  
}  

  1. 首页设计:

    导入压缩包中的index和utils文件,根据作业要求修改临时新闻素材common.js文件:

//模拟新闻数据  
const news = [  
  {id: '264698',  
  title: '中国海大志愿者完成第五届跨国公司领导人青岛峰会志愿服务',  
  poster: 'https://news.ouc.edu.cn/_upload/article/images/dd/19/ede76a4a4ebdb1d3ab278a12fdd8/9bb154f8-e33b-421a-b453-82c758a32405.jpg',  
  content: ' 8月27日至29日,第五届跨国公司领导人青岛峰会在青岛国际会议中心举办。为全面做好服务保障,确保峰会顺利举行,中国海洋大学招募选派115名志愿者参与峰会志愿服务,志愿者们以饱满的热情完成本次大会的各项工作,累计服务时长3000余小时,用实际行动展现中国海大青年风采。',  
  add_date: '2024-08-31'},  
  {id: '304083',  
  title: '贵州省人大干部综合能力提升培训班在中国海洋大学举办',  
  poster: 'https://news.ouc.edu.cn/_upload/article/images/3a/4d/73b22a9b404f93e907238f2a2325/55606b28-53b8-412f-9420-74c7a30657b6.jpg',  
  content: ' 8月26日至30日,贵州省人大干部综合能力提升培训班(第三期)在中国海洋大学举办。贵州省人大常委会党组成员于杰,中国海洋大学党委常委、副校长王雪鹏出席开班式,贵州省人大常委会副秘书长、机关党组成员闵红棕主持开班式。',  
  add_date: '2024-08-30'},  
  {id: '305670',  
  title: '中国海洋大学开展2024级本科生集中入学教育',  
  poster: 'https://news.ouc.edu.cn/_upload/article/images/94/9e/509119874e5287e8c56ef708865b/11604054-e936-468b-a50e-a4233e475a53.jpg',  
  content: '为帮助2024级本科生尽快适应大学生活,8月27日,学校在崂山校区体育馆举行了2024级本科生集中入学教育。当天的集中教育分为心理健康教育、传染病防控教育和安全教育三个部分。学校学生工作处副处长、心理健康教育与咨询中心主任牟宏玮就“如何解决大学生的心理困惑”这一问题与同学们深入交流,引导同学们用“热爱心、平常心、进取心、同理心、初心”五心来调整自身状态,积极适应大学生活;青岛市中心医院呼吸科副主任刘加洪医生主讲《肺结核、新冠、流感等呼吸道传染病防治及校园控烟》,带领同学们认识了肺结核等呼吸道传染病的感染症状、传染途径和预防措施,以及吸烟的危害和校园控烟措施;学校党委保卫部副部长、保卫处副处长王法利以《平安海大 与你同行》为题,为2024级本科生讲授入学安全教育第一课。他用生动的案例和详实的数据,向同学们介绍了防盗、防诈骗、消防安全、交通安全、网络安全、国家安全等安全知识,教育引导同学们遵守国家法律法规和学校规章制度,主动学习安全知识,提高安全防范技能。',  
  add_date: '2024-08-29'}  
];  
  1.  个人中心页设计

    这个板块可以注意的是“我的收藏”的新闻和首页相同,没必要重复代码、造成冗余,可以将index. wxss中新闻列表样式的相关代码挪到app. wxss 中公共使用。

    修改my.wxml文件:

<!--pages/my/my.wxml-->  
<!-- 登陆面板 -->  
<view id="myLogin">  
    <block wx:if="{{isLogin}}">  
        <image id="myIcon" src="{{src}}"></image>  
        <text id="nickName">{{nickName}}</text>  
    </block>  
    <button wx:else open-type="getUserInfo" bindtap="getMyInfo">未登录,点此登录</button>  
</view>  
<!-- 我的收藏 -->  
<view id="myFavorites">  
    <text>我的收藏({{num}})</text>  
    <!-- 收藏的新闻列表 -->  
    <view id="news-list">  
        <view class="list-item" wx:for="{{newsList}}" wx:for-item="news" wx:key="{{news.id}}">  
            <image src="{{news.poster}}"></image>  
            <text bindtap="goToDetail" data-id="{{news.id}}">◇{{news.title}}——{{news.add_date}}</text>  
        </view>  
    </view>  
</view>  

    修改my.wxss文件:

/* pages/my/my.wxss */  
/* 登陆面板 */  
#myLogin {  
    background-color: #328eeb;  
    height: 400rpx;  
    display: flex;  
    flex-direction: column;  
    align-items: center;  
    justify-content: space-around;  
}  
  
/* 1-1 头像图片 */  
#myIcon {  
    width: 200rpx;  
    height: 200rpx;  
    border-radius: 50%;  
}  
  
/* 1-2 微信昵称 */  
#nickName {  
    color: white;  
}  
  
/* 我的收藏 */  
#myFavorites {  
    padding: 20rpx;  
}  

  1. 新闻页设计

    修改detail.wxml文件:

<!--pages/detail/detail.wxml-->  
<view class="container">  
    <view class="title">{{article.title}}</view>  
    <view class="poster">  
        <image src="{{article.poster}}" mode="widthFix"></image>  
    </view>  
    <view class="content">{{article.content}}</view>  
    <view class="add_date">时间:{{article.add_date}}</view>  
  
    <button wx:if="{{isAdd}}" plain bindtap="cancelFavorites">❤已收藏</button>  
    <button wx:else plain bindtap="addFavorites">❤点击收藏</button>  
</view> 

修改detail.wxss文件:

/* pages/detail/detail.wxss */  
/* 整体容器 */  
.container {  
    padding: 15rpx;  
    text-align: center;  
}  
  
/* 新闻标题 */  
.title {  
    font-size: 14pt;  
    line-height: 80rpx;  
}  
  
/* 新闻图片 */  
.poster image {  
    width: 100%;  
}  
  
/* 新闻正文 */  
.content {  
    text-align: left;  
    font-size: 12pt;  
    line-height: 60rpx;  
}  
  
/* 新闻日期 */  
.add_date {  
    font-size: 12pt;  
    text-align: right;  
    line-height: 30rpx;  
    margin-right: 25rpx;  
    margin-top: 20rpx;  
}  
  
/* 点击收藏 按钮 */  
button {  
    width: 250rpx;  
    height: 100rpx;  
    margin: 20rpx auto;  
} 

  1. 逻辑实现:
  1. 首页页面:展示新闻列表、点击新闻跳转逻辑不再赘述

  

  1. 个人中心页面:

1.获取微信用户信息(my.js)

getMyInfo: function(e) {  
        wx.getUserProfile({  
          desc: '获取用户信息',  
          success: (res) => {  
              console.log(res)  
              let info = res.userInfo;  
              this.setData({  
                  isLogin: true,  
                  src: info.avatarUrl,  
                  nickName: info.nickName  
              })  
              // 获取收藏列表  
              this.getMyFavorites();     
          }  
        })  
    }, 

 

2.获取收藏列表(my.js)

getMyFavorites: function() {  
        // 读取本地缓存信息  
        let info = wx.getStorageInfoSync();  
        // 获取全部key信息  
        let keys = info.keys;  
        // 获取收藏新闻数量  
        let num = keys.length;  
  
        let myList = [];  
        for(var i = 0; i < num; ++i){  
            let obj = wx.getStorageSync(keys[i]);  
            myList.push(obj);  
        }  

3.浏览收藏的新闻:

   与首页点击新闻跳转相似

  1. 新闻页页面:

1. 显示对应新闻(detail.js)

    在首页中,点击新闻跳转时携带了新闻ID,新闻页需接收ID编号,并查询对应的新闻内容在获取id后,需检查当前新闻是否在收藏夹中来确认isAdd是true还是false,来使收藏按钮显示不同的文本

onLoad: function (options) {  
    // 获取页面跳转来时携带的数据  
    let id = options.id  
  
    // 检查当前新闻是否在收藏夹中  
    var article = wx.getStorageSync(id)  
    // 已存在  
    if(article != ''){  
        this.setData({  
            article: article,  
            isAdd: true  
        })  
    }  
    // 不存在  
    else {  
        let result = common.getNewsDetail(id)  
        // 获取到新闻内容  
        if(result.code == '200'){  
            this.setData({  
                article: result.news  
            })  
        }  
    }        
}  

2. 添加、取消新闻收藏(detail.js)

/** 
 * 添加到收藏夹 
 */  
addFavorites: function(options) {  
    let article = this.data.article;  
    wx.setStorageSync(article.id, article)  
    this.setData({isAdd: true})  
},  
  
/** 
 * 取消收藏 
 */  
cancelFavorites: function() {  
    let article = this.data.article;  
    wx.removeStorageSync(article.id);  
    this.setData({isAdd: false})  
},  

三、程序运行结果

测试收藏功能和取消收藏ing:

展示首页幻灯片照片放送ing:

展示新闻详细页面ing:

四、问题总结与体会

实验问题

本次实验较为简单,没有遇到问题

收获与体会

    通过本次实验,我深入学习了微信小程序的开发,特别是在从0开始模仿网易新闻实现一个基于模拟数据的简易高校新闻小程序。我掌握了如何使用 tabBar并且注意到了要控制代码冗余。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值