2022年夏季《移动软件开发》实验报告
一、实验目标
1、综合所学知识创建完整的前端新闻小程序项目;
2、能够在开发过程中熟练掌握真机预览、调试等操作。
二、实验步骤
1.页面配置
将app.json文件中pages属性中的pages/logs/logs删除;追加pages/detail/detail和pages/my/my;保存后会自动生成detail和my目录,分别在其中添加json文件和wxsswenjian。
创建images文件放图片素材,utils文件放公共js文件。
全部完成后的目录结构如图所示:
2.导航栏设计
app.json相关代码:
"window":{ "navigationBarBackgroundColor": "#328EEB", "navigationBarTitleText": "我的新闻网", "navigationBarTextStyle":"white" }
3.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": "我的" } ] }
4.页面设计
首页:
wxml相关代码:
<!-- 幻灯片 --> <swiper indicator-dots="true" autoplay="true" interval="5000" duration="500"> <view wx:for="{{swiperImg}}" wx:key="swiper{{index}}"> <swiper-item> <image src="{{item.src}}"></image> </swiper-item> </view> </swiper> <!-- 新闻列表 --> <view class="news-list"> <view class="news-item" wx:for="{{newsList}}" wx:key="{{item.id}}" > <image src="{{item.poster}}" ></image> <text bindtap = 'goToDetail' data-id="{{item.id}}">{{item.title}}————{{item.add_date}}</text> </view> <button plain="true">加载更多</button> </view>
wxss相关代码:
/* 幻灯片部分 */ swiper{ height: 400rpx; width:100%; } swiper image{ height: 100%; width:100%; }
js相关代码:
data: { swiperImg: [ { src: "http://image1.chinanews.com.cn/cnsupload/big/2019/10-01/4-426/a7e426b0dd6c43d2bc710fafe810a0d5.jpg" }, { src: "http://i2.chinanews.com/simg/cmshd/2019/10/05/998e12aa71f248d4a797761b18e48418.jpg" }, { src: "http://i2.chinanews.com/simg/cmshd/2019/10/01/c5391220f28d49bdbd14c58a4300bde0.jpg" } ], newsList:[] }, goToDetail:function(e){ //获取携带data-id的数据 let id = e.currentTarget.dataset.id //console.log(e) //携带新闻ID进行页面跳转 wx.navigateTo({ url: '../detail/detail?id=' + id, }) }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let list = common.getNewList() this.setData({ newsList:list }) },
个人中心页:
wxml相关代码:
<!-- 登陆页面 --> <view class="myLogin"> <block wx:if="{{isLogin}}"> <image src="{{src}}"></image> <text>{{nickName}}</text> </block> <button wx:else open-type="getUserInfo" bindgetuserinfo="getMyInfo">未登录,点此登录</button> </view> <!-- 收藏列表 --> <view class="myFavorite"> <text>我的收藏({{number}})</text> <view class="news-list"> <view class="news-item" wx:for="{{newsList}}" wx:key="{{item.id}}"> <image src="{{item.poster}}"></image> <text bindtap = 'goToDetail' data-id="{{item.id}}">{{item.title}}————{{item.add_date}}</text> </view> </view> </view>
wxss相关代码:
/* 登陆页面 */ .myLogin{ height: 400rpx; background-color: #328EEB; display: flex; flex-direction: column; align-items: center; justify-content: space-around; } .myLogin image{ height: 200rpx; width:200rpx; border-radius: 50%; } .myLogin text{ color: white; } /* 收藏列表 */ .myFavorite{ padding: 20rpx; }
js相关代码:
/** * 页面的初始数据 */ data: { number:0, nickName:"未登录", src:"/images/index1.png", newsList: [] }, // 获取个人信息 getMyInfo:function(e){ //console.log(e.detail.userInfo) let info = e.detail.userInfo this.setData({ src:info.avatarUrl, nickName:info.nickName, isLogin:true }) //获取新闻列表 this.getMyFavorites() }, //更新number getMyFavorites:function(){ let info = wx.getStorageInfoSync() //读取本地缓存信息 let keys = info.keys //获取全部key信息 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, number:num }) }, goToDetail: function (e) { //获取携带data-id的数据 let id = e.currentTarget.dataset.id //console.log(e) //携带新闻ID进行页面跳转 wx.navigateTo({ url: '../detail/detail?id=' + id, }) }, /** * 生命周期函数--监听页面显示 */ onShow: function () { if( this.data.isLogin ){ this.getMyFavorites() } },
点击登录后:
收藏新闻后:
新闻页:
wxml相关代码:
<view class="container"> <view class="title">{{article.title}}</view> <view class="poster"> <image src="{{article.poster}}"></image> </view> <view class="content"> <text>{{article.content}}</text> </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>
wxss相关代码:
.container{ padding:15rpx; /* text-align: center; */ } .title{ font-size: 35rpx; line-height: 35rpx; text-align: center; } .poster image{ width: 100%; } .content text{ text-align: left; font-size: 30rpx; line-height: 35rpx; } .add_date{ font-size: 30rpx; text-align: right; line-height: 30rpx; margin-right: 25rpx; margin-top:20rpx; } button{ width: 250rpx; height:100rpx; margin:20rpx auto; }
js相关代码:
/** * 页面的初始数据 */ data: { article: { id: '239875', title: '记者手记:国家庆典,每个人都是记录者', poster: 'http://i2.chinanews.com/simg/cmshd/2019/10/01/c5391220f28d49bdbd14c58a4300bde0.jpg', add_date: '2019 - 10 - 01', content: ' 10月1日凌晨3时,大批中外记者先后乘坐巴士,向天安门方向出发。仍处于夜幕中的北京,多数市民正在享受难得的假期时光。此刻长安街上的安静,将与7个小时后形成巨大反差。' }, isAdd:false }, //添加收藏 addFavorites:function(){ 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 }) }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let id = options.id //检查当前新闻是否在收藏夹中 var newarticle = wx.getStorageSync(id) //已存在 if( newarticle != '' ){ this.setData({ isAdd:true, article:newarticle }) } //不存在 else{ let result = common.getNewsDetail(id) //获取新闻内容 if( result.code == '200' ){ this.setData({ article:result.news, isAdd:false }) } } },
三、程序运行结果
四、问题总结与体会
本次实验根据老师给的文档一步一步做下来,十分顺利,没有遇到十分严重的问题。