微信小程序文章详情页面实现代码


Posted in Javascript onSeptember 10, 2018

先自己绘制了一个丑陋的原型图,然后开始在小程序上绘制页面,然后设计样式,一路过来总结就是哪里不懂查哪里之旅~

原型设计和分析

原型图效果

微信小程序文章详情页面实现代码

文章详情.png

为什么要这么设计?

正常情况下是设计先出设计图,然后服务器和我们一同讨论接口如何设计,然后根据服务器返回的结果,我们再去界面上显示。但是这里我们使用的是第三方的接口,所以只能他有什么我们显示什么了。

服务器接口返回的数据如下如:

微信小程序文章详情页面实现代码

小程序-服务器返回结果.png

分析 json 结果,我们这里为了简单,也就只显示几个元素分别是 时间,标题,类型,作者,图片

整体是垂直排列,然后图片是根据是否有返回来动态显示,最后的心形图标是为了收藏使用(目前还未实现收藏功能)

原型实现

在实现的过程中一步步思考,首先是页面如何实现,然后是数据如何获取,最后是如何动态显示数据

页面实现

从原型图分析,我们的根布局需要能够整体垂直滑动,然后图片水平显示三行(后来实现的时候发现水平显示图片,图片太小不美观,故改成图片整体垂直摆放)

详情页面的整体布局 reading-detail.wxml

<view>
 <view class='top-text'>
 <text>web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。个人类型与海外类型的小程序暂不支持使用。</text>
 </view>
 <view class="divLine"></view>
 <view>
 <view class='content-text'>
  <text>{{content}}</text>
 </view>
 <view class='image-container'>
  <block wx:for="{{images}}" wx:for-item="item" wx:for-index="idx">
  <view class='image-container' catchtap='onImageClick' data-imageUrl="{{item.imageUrl}}">
   <image wx:if="{{hadImage}}" class='image-item' src="{{item.imageUrl}}" mode='widthFix'></image>
  </view>
  </block>
 </view>
 <view>
  <text class='type-text'>类型:{{postType}}</text>
  <text class='type-author'>作者:{{who}}</text>
 </view>
 <view><text class='type-date'>发布时间:{{date}}</text></view>
 <view><text class='url-text'>网页链接:{{url}}</text></view>
 <view class='view-like' catchtap='onLikeClick'>
  <image class='icon-like' src='/images/detail/icon_like.png'></image>
 </view>
 </view>
</view>

布局还算好做的,难点就在于页面的样式如何去调整(难也是相对新手,比如我这种小白吧)

详情页面的样式文件 wxss

.scroller-container{
 height: 1300rpx;
}
.top-text{
 font-size: 24rpx;
 color: #999;
 margin-left: 20rpx;
 margin-right: 20rpx;
}

.divLine{
 background: #D1D1D6;
 width: 100%;
 height: 2px;
 margin: 20rpx;
}

.content-text{
 margin: 20rpx;
 font-size: 40rpx;
 font-weight: 600rpx;
 color: #333;
}
.image-container{
 display: flex;
 flex-direction: column;
 width: 100%;
 height: auto;
 margin: 20rpx;
}

.image-item{
 width: 100%;
 height: 600rpx;
 padding-bottom: 20rpx;
}
.view-like{
 display: flex;
 flex-direction: row;
 width: 100%;
 align-items: center;
 justify-content: center;
}
.icon-like{
 width: 128rpx;
 height: 128rpx;
 margin-top: 20rpx;
}
.type-text{
 margin-left: 10rpx;
 font-size: 30rpx;
}
.url-text{
 margin-left: 10rpx;
 font-size: 24rpx;
}
.type-author{
 margin-left: 10rpx;
 font-size: 30rpx;
}
.type-date{
 margin-left: 10rpx;
 font-size: 30rpx;
}

在实现心形图标居中过程中 align-items: center;(交叉轴上的对齐方式) 没居中显示,查了下是需要设置显示为水平摆放,然后还需要设置 justify-content: center;(表示在主轴上的对齐方式) 这里有一篇文章介绍微信小程序布局挺好的微信小程序布局基础

数据获取

通过上一个页面传递过来,目前是用最简单的 url 传值的形式传递

在 reading.js 文件中的点击事件传递数据

/**
 * item 的点击事件
 */
 onGankTap:function(event){
 var url = event.currentTarget.dataset.posturl;
 var desc = event.currentTarget.dataset.postdesc;
 var postType = event.currentTarget.dataset.posttype;
 var who = event.currentTarget.dataset.postwho;
 var date = event.currentTarget.dataset.postdate;
 var images = event.currentTarget.dataset.postimages;

 wx.navigateTo({
  url: "reading-detail/reading-detail?url=" + url + "&content=" + desc + "&type=" + postType + "&who=" + who + "&date=" + date +"&images="+images 
 })
 },

在 reading-detail.js 文件中接受传递过来的数据,并对数据处理

/**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 var url = options.url;
 var content = options.content;
 var postType = options.type;
 var who = options.who;
 var date = options.date;
 var images = options.images.split(',');
 var imageArray = [];
 var hadImage = false ;
 
 for (var i = 0; i < images.length; i++) {
  // 图片不为空则存到数组中
  if (images[i] != "undefined"){
  var obj = {
   imageUrl: images[i],
  }
  imageArray.push(obj);
  }
 }
 // 是否有图片
 if (imageArray.length > 0) {
  hadImage = true;
 } else {
  hadImage = false;
 }
 // 传递数据给ui显示
 this.setData({
  url: url,
  content: content,
  date: date,
  postType: postType,
  who: who,
  images: imageArray,
  hadImage: hadImage
 })
 // 标题
 wx.setNavigationBarTitle({
  title: "文章详情"
 })
 },

数据动态填充

通过判断语句动态判断控制图片显示的变量是否有值,有则显示图片组件,没有则不显示图片组件。

在 reading-detail.wxml 中通过判断语句判断是否显示图片组件, hadImage 是 js 中传递过来的值

<image wx:if="{{hadImage}}" class='image-item' src="{{item.imageUrl}}" mode='widthFix'></image>

ok,查看文章详情功能到这里了(详情页最好是直接用 web-view 展示,但是个人开发不支持 web-view 组件)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
Mar 18 Javascript
用原生js做个简单的滑动效果的回到顶部
Oct 15 Javascript
node.js中的fs.truncate方法使用说明
Dec 15 Javascript
在Mac OS下使用Node.js的简单教程
Jun 24 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
javascript数组常用方法汇总
Sep 10 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
js实现网页定位导航功能
Mar 07 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
Jul 20 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 #Javascript
JavaScript读写二进制数据的方法详解
Sep 09 #Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 #Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 #Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 #Javascript
原生JS实现前端本地文件上传
Sep 08 #Javascript
JS实现可视化文件上传
Sep 08 #Javascript
You might like
PHP调用三种数据库的方法(2)
2006/10/09 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
php获取后台Job管理的实现代码
2011/06/10 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
python 类详解及简单实例
2017/03/24 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Django 使用logging打印日志的实例
2018/04/28 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Python中pass的作用与使用教程
2020/11/13 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
挂牌仪式主持词
2014/03/20 职场文书
春节联欢会主持词
2014/03/24 职场文书
住房租房协议书
2014/08/20 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
学前班学生评语
2014/12/29 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers