中国海洋大学2023年夏季《移动软件开发》实验报告5

中国海洋大学2023年夏季《移动软件开发》实验报告5

Info: 韩翔 21020007023

Date: 2023-08-21

项目创建

生成js模板,并进行如下操作:

  • 删除utils文件夹及其内部所有内容

  • 删除pages文件夹下的logs目录及其内部所有内容

  • 删除index.wxml和index.wxss中的全部代码

  • 删除index.js中的全部代码,并且输入关键词page生成模板

  • 删除app.wxss中的全部代码

  • 删除app.js中的全部代码,并且输入关键词app生成模板

此外,还需要创建images和utils文件夹,分别用于存储静态图片素材和common.js,common.js用于后续存储虚拟信息。
在这里插入图片描述
在这里插入图片描述

视图设计

首先调整导航栏的属性,将其更改为蓝色底色、白色字体,并更改导航栏中的文字为“高校新闻网”:

在这里插入图片描述

对于底部的tabBar,在app.json中追加如下代码:

"tabBar": {
    "color": "#000",
    "selectedColor": "#328KKB",
    "list": {
        "pagePath": "pages/index/index",
        "iconPath": "images/index.png",
        "selectedIconPath": "images/index_blue.png",
        "text": "首页"
    },
    {
    	"pagePath": "pages/my/my",
    	"iconPath": "images/my.png",
    	"selectedIconPath": "images/my_blue.png",
    	"text": "我的"
	}
}

在这里插入图片描述

对于首页的设计,需要添加幻灯片滚动和新闻列表,使用<swiper>和<view>组件。

导入的swiperImg可参考如下代码:

  /**
   * 页面的初始数据
   */
  data: {
    //幻灯片素材
    swiperImg: [
      {src: 'https://gaopursuit.oss-cn-beijing.aliyuncs.com/2022/newsimage1.jpg'},
      {src: 'https://gaopursuit.oss-cn-beijing.aliyuncs.com/2022/newsimage2.jpg'},
      {src: 'https://gaopursuit.oss-cn-beijing.aliyuncs.com/2022/newsimage3.jpg'}
    ],
  },

为了进行布局和样式效果的预览,还需要在js文件的data中临时录入几个测试数据。

对于个人中心页,需要设计登录面板和我的收藏。

此外,由于新闻列表的样式与首页完全相同,可以将index.wxss中新闻列表样式的相关代码挪到app.wxss中公共使用。

#news-list {
  min-height: 600rpx;
  padding: 15rpx;
}

.list-item {
  display: flex;
  flex-direction: row;
  border-bottom: 1rpx solid gray;
}

.list-item image {
  width: 230rpx;
  height: 150rpx;
  margin: 10rpx;
}

.list-item text {
  width: 100%;
  line-height: 60rpx;
  font-size: 10pt;
}

还要对新闻页进行设计,需要包含标题、图片、正文、日期四个部分。可以借助添加编译模式来临时预览新闻业的效果。

  • container: 整体容器;
  • title: 新闻标题区域;
  • poster: 新闻图片区域;
  • content: 新闻正文区域;
  • add_date: 新闻日期区域。

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>
</view>

逻辑实现

common.js使用老师提供的文件即可。

通过为标签绑定事件,实现用户点击新闻标题即可实现跳转。

bindtap=‘goToDetail’ data-id=‘{{news.id}}’

通过修改onLoad函数,实现显示对应新闻的功能。

onLoad: function(options) {
    let id = options.id
    let result = common.getNewsDetail(id)
    if (result.code == '200') {
        this.setData({article:result.news})
    }
}

实现添加/取消新闻收藏,需要追加两个button按钮,并使用wx:if和wx:else属性决定显示的按钮样式。

个人中心页,需要实现获取用户信息和加载收藏列表的功能。

WXML:

<!-- 登录面板 -->
<view id="myLogin">
  <block wx:if="{{isLogin}}">
    <image id="myIcon" src="{{src}}"></image>
    <text id="nickName">{{nickName}}</text>
  </block>
  <button wx:else bindtap="getUserInfo">未登录,点此登录</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>

WXSS:

#myLogin {
  background-color: #328EEB;
  height: 400rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-around;
}

#myIcon {
  width: 200rpx;
  height: 200rpx;
  border-radius: 50%;
}

#nickName {
  color: white;
}

#myFavorites {
  padding: 20rpx;
}

JS:

// pages/my/my.js
var common = require("../../utils/common")
Page({
  //获取授权信息
  getUserInfo: function(){
    wx.getUserProfile({
      desc: '获取授权信息',
      success: (res) => {
        let info = res.userInfo
        this.setData({
          isLogin: true,
          src: info.avatarUrl,
          nickName: info.nickName
        })
        this.getMyFavorites()
      }
    })
  },

  //跳转到详情页
  goToDetail: function(e){
    let id = e.currentTarget.dataset.id;

    wx.navigateTo({
      url: '../detail/detail?id=' + id,
    })
  },

  getMyFavorites: function(){
    //读取所有本地信息
    let info = wx.getStorageInfoSync()
    
    if (!info){
      console.log("未获取到信息")
    } else {
      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)
      }

      this.setData({
        newsList: myList,
        num: num
      })
    }
  },

  /**
   * 页面的初始数据
   */
  data: {
    num: 0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log(this.data.isLogin)
    console.log("调用onShow事件")
    if (this.data.isLogin){
      //更新收藏列表
      this.getMyFavorites()
      console.log("更新数据")
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

在这里插入图片描述

此时就能够完成登录和加载收藏页的功能。

在完成上述操作后,应当清除临时数据,以免影响整体逻辑效果。

要清理的数据如下:

  • 首页
  • 新闻页
  • 个人中心页

效果

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值