本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP

要做微信小程序首先要对htmlcssjs有一定的基础,还有对微信小程序的API也要非常熟悉

我将该教程分为以下三篇

  1. 微信小程序日记——高仿知乎日报(上)
  2. 微信小程序日记——高仿知乎日报(中)
  3. 微信小程序日记——高仿知乎日报(下)

三篇分别讲不同的组件和功能块

这篇要讲

  • 主题日报
  • 我的收藏
  • 设置
  • 图片修正

主题日报

主题日报的样式跟首页几乎一模一样,区别在多了一行主编区域。不过这个主编区域没有实现什么功能,本来是点击主编的头像跳转到主编的个人首页简介,没有时间安排就不做了,这也是需要解析html的(累),所以和主页共享一个页面根据主题id判断,如果是主题日报,顶部的swiper换成image,同时显示主编信息

主题日报列表需要接受一个具体的主题日报id,根据这个id来请求接口获取主题日报的日报列表。
点击相应的主题触发这个方法,加载数据之后收起侧滑菜单

toThemePage: function( e ) {
var _this = this;
_this.setData( { loading: true,themeId:e.currentTarget.dataset.id });
console.log( 'themeId', _this.data.themeId );
requests.getThemeStories( _this.data.themeId, ( data ) => {
data.background=data.background.replace("pic1","pic3");
data.background=data.background.replace("pic2","pic3");
for(var i=0;i<data.editors.length;i++){
data.editors[i].avatar=data.editors[i].avatar.replace("pic1","pic3");
data.editors[i].avatar=data.editors[i].avatar.replace("pic2","pic3");
}
data=utils.correctData(data);
_this.setData( {
pageData: data.stories,
background: data.background,
description: data.description,
editorData: data.editors
});
slideDown.call( this );
}, null, () => {
_this.setData( { loading: false });
});
},
主题日报的请求列表方式和主页的列表方式差不多,由于没有发现分页参数,主题日报的日报列表这部分也没有分页请求。主题日报的日报详情还是跳转到日报详情页面的。

收藏页面

收藏页面就是只剩下下面列表项的,所以也是共用了主页的页面,在主题日报的基础上再判断,如果是我的收藏页面就不显示顶部图片和主编信息
点击我的收藏触发以下方法

toCollectPage: function( ) {
var _this = this;
_this.setData( { themeId:-1});
var pageData = wx.getStorageSync('pageData') || []
console.log(pageData);
_this.setData({
themeId:-1,
pageData:pageData
})
slideDown.call( this );
},

设置页面

本来想做设置页面里列出的功能,但是工作比较忙,还是归入到后边的完善计划吧,现阶段只做了简单的页面布局。

但是还是讲一下自己的思路
– 夜间模式就是改变应用的显示样式,利用到了css,我们可以在page中放置一个顶层的view来包括起所有的wxml元素,当切换主题时给页面顶层元素一个主题控制类。

<view class="light">
....
</view> <view class="night">
...
</view>

那怎么实现换肤立即生效呢?一个页面刚启动是会经过onLoad、onShow等,当第二次进来的时候页面的onLoad事件就不会在次触发,而是触发onShow事件,我们可以通过onShow事件来获取存在全局缓存中的主题设置。


onShow: function() {
var app = getApp();
this.setData({theme: app.globalData.theme});
}
<view class="{{theme}}">
...
</view>
  • 清除缓存功能,当然是把临时文件和localStorage中的数据清空。
clearDataEvent: function() {
wx.clearStorage(); //清除应用数据
}
  • 应用的无图浏览模式跟主题的思路差不多,就是判断应用缓存中的设置是否是无图模式,如果是就在内容显示的时候加一个判断,根据这个值来判断是否显示图片类型的内容。
onLoad: function() {
var app = getApp();
this.setData({imageMode: app.getImageMode()});
}
<view>
<image wx:if="{{imageMode}}" src="..." />
<!--或者-->
<block wx:if="{{imageMode}}">
<image src="..." />
</block>
</view>

图片修正

如果是用知乎日报提供的图片地址,如:

http://pic1.zhimg.com//9e26ccbadca80e2e94f89d24b7ce6b04.jpg

pic1和pic2的图片都不能正常显示,这应该是微信小程序开发工具的bug,所以我们只能把它们替换成pic3或者pic4,后来发现首页的列表和顶部图片用pic4可以正常显示,主编头像用pic3才能正常显示,详细页面也用pic3,我新建了一个方法来修正主页图片地址,其他那些只要在相应位置replace一下就好

/**
* 修正图片url,将pic1和pic2改为pic4
* @param data
* @returns {*}
*/
function correctData(data){
if (("top_stories" in data) ){
var top_stories=data.top_stories;
for(var i = 0;i < top_stories.length; i++) {
top_stories[i].image = top_stories[i].image.replace("pic1", "pic4");
top_stories[i].image = top_stories[i].image.replace("pic2", "pic4");
}
data.top_stories=top_stories;
}
var stories=data.stories;
for(var i = 0;i < stories.length; i++) {
if (("images" in stories[i]) ){
var s=stories[i].images[0];
s=s.replace("pic1", "pic4");
s=s.replace("pic2", "pic4");
stories[i].images[0] =s;
}
}
data.stories=stories;
return data;
}

总结

问题

  • 代码结构比较烂,很多地方都没有优化处理,复用率较低,待重构。
  • 页面布局有些不合理,尺寸控制的不够好。
  • 部分wxml没有用模版功能代替重复的渲染工作,达不到复用效果。

闲语

本次编写的小程序用到了蛮多知识点,虽然花费了不少时间,但是一切都是非常的值得。编写的过程中遇到最大的困难就是解析html内容,可以说是绞尽脑汁,哈哈,智商不足啦。很期待能有网友能奉献出更好的解决方法。这个小例子做的比较简陋,很多功能没有完全实现,跟别人的Android和React仿客户端相比,小巫见大巫啦。还得抽空完成后续的更多功能。

到目前为止,小程序已经更新了几次,支持了ES5/ES6转换、下拉刷新事件、上传文件等功能,不过还有很多API还不能在模拟环境下显示效果。自己觉得一直做类似于豆瓣图书和知乎日报等除了网络请求之外没什么特别的地方的应用也不好,需要尝试新的API来扩展自己的视野,后续打算往未使用到的API进行案例制作。不知不觉已经踏出校园准备有4个月了,很怀念以前的学习日子,做过很多案例,但是都没有写日志和保存的习惯。这次写的字数蛮多的,可累死我了。很幸运自己初入工作圈就能碰上小程序风暴,期待它正式公测!

现阶段比较完整的效果动态图

本次示例的源码地址:

http://www.hotlist.com.cn/archives/189.html

如果大家喜欢,给个start激励一下我,以后会有更好的作品与大家分享:)

微信小程序开发日记——高仿知乎日报(下)的更多相关文章

  1. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  2. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  3. 微信小程序开发教程 #043 - 在小程序开发中使用 npm

    本文介绍了如何在微信小程序开发中使用 npm 中包的功能,大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频版更新. 微信小程序在发布之初没有对 npm 的支持功能,这也是目前很多前端开发 ...

  4. [干货教程]仿网易云课堂微信小程序开发实战经验

    本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...

  5. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  6. 《腾讯游戏人生》微信小程序开发总结

    为打通游戏人生擂台赛与线下商家的O2O衔接,同时响应时下日臻火热的微信小程序,项目团队决定也开发一款针对性的微信小程序,以此方便商家在我们平台入驻并进行擂台赛事的创建和奖励的核销,进一步推广擂台赛的玩 ...

  7. 微信小程序开发心得

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...

  8. 微信小程序开发工具使用与设计规范(二)

    [未经作者本人同意,请勿以任何形式转载] 上一篇文章主要分析了微信小程序应用场景和优劣势.本篇你可以学习到: 如何使用小程序开发工具写一个Hello World 微信小程序设计规范 微信小程序项目结构 ...

  9. 微信小程序开发心得--动画机制

    微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受.首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司认 ...

随机推荐

  1. VisualStudio2013 如何打开之前版本开发的(.vdproj )安装项目

    当你的项目使用早于 visualstudio2013 的版本开发并且使用 Visual Studio Installer 制作安装项目时,在升级至 VS2013 后会发现新安装项目无法打开, VS20 ...

  2. Lambda

    Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...

  3. php报错 ----> Call to undefined function imagecreatetruecolor()

    刚才在写验证码的时候,发现报错,然后排查分析了一下,原来是所用的php版本(PHP/5.3.13)没有开启此扩展功能. 进入php.ini 找到extension=php_gd2.dll ,将其前面的 ...

  4. 微框架spark--api开发利器

    spark简介 Spark(注意不要同Apache Spark混淆)的设计初衷是,可以简单容易地创建REST API或Web应用程序.它是一个灵活.简洁的框架,大小只有1MB.Spark允许用户自己选 ...

  5. 使用mybatis-generator在自动生成Model类和Mapper文件

    使用mybatis-generator插件可以很轻松的实现mybatis的逆向工程,即,能通过表结构自动生成对应的java类及mapper文件,可以大大提高工作效率,并且它提供了很多自定义的设置可以应 ...

  6. 利用apply()或者rest参数来实现用数组传递函数参数

    关于call()和apply()的用法,MDN文档里写的非常清晰明白,在这里就不多做记录了. https://developer.mozilla.org/zh-CN/docs/Web/JavaScri ...

  7. ASP.NET Core 中文文档 第五章 测试(5.2)集成测试

    原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...

  8. iOS架构一个中型普通App的一些经验总结

    这一版比较完善的的App终于提交审核了.有时间写写自己的一些经验的总结了.自己主导的从0到比较成型的app到目前来说也只有两个,但是其中的很多东西都是大同小异.基本上是想到了什么就写什么,感觉写的不到 ...

  9. windows下 安装 rabbitMQ 及操作常用命令

    rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rab ...

  10. 文档对象模型DOM通俗讲解

    转自:http://www.jb51.net/article/42671.htm 在开始之前先说一点,DOM是非常容易理解的,但是大家说的太官方,让人很是难于理解,我们就用非常简单的语言翻译一遍.加深 ...