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

时间:2023-02-13 15:43:08

本人对知乎日报是情有独钟,看我的博客和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. 微信小程序开发教程 &num;043 - 在小程序开发中使用 npm

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

  4. &lbrack;干货教程&rsqb;仿网易云课堂微信小程序开发实战经验

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

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

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

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

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

  7. 微信小程序开发心得

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

  8. 微信小程序开发工具使用与设计规范&lpar;二&rpar;

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

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

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

随机推荐

  1. &period;net4&period;0及Silverlight&lowbar;Tools for vs2008sp1安装失败解决办法

    安装.net framework 4.0失败,出现HRESULT 0xc8000222错误代码 1.开始-运行-输入cmd,运行命令     net stop WuAuServ 2.开始-运行-输入  ...

  2. 程序进入 EXPORT App&lowbar;Fault&lowbar;ISR的原因及措施:

    最近再UCOSIII+LPC1768上移植modbus,在定时器初始化部分竟然跑飞进入 EXPORT  App_Fault_ISR,查资料.逛论坛.问大牛都没有解决,最后发现竟然是犹豫一个低级失误引起 ...

  3. linux sed命令学习

    . Sed简介 . 定址 . Sed命令 . 选项 . 元字符集 . 实例 . 脚本 . 小技巧 . Sed简介 sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中, ...

  4. wxPython跨线程调用

    版权所有,转载请注明出处:http://guangboo.org/2013/08/23/wxpython-non-gui-thread-call-gui-method 之前有介绍了<wxPyth ...

  5. Java JSON处理库Jackson

    Jackson是一款为Java平台提供的一套数据处理类库工具,Jackson的主要功能是提供JSON解析和生成.另外,Jackson还提供额外的类库以支持处理Avro, CBOR, CSV, Smil ...

  6. AUTOSAR分层-MCAL辨析

    8. AUTOSAR中MCAL虽然包含各种drvier,但毕竟是AL即抽象层,不应包含architecture和device特定的信息.应该只包含模型定义,不包含实现细节.   AUTOSAR文档中的 ...

  7. Netty 系列一(核心组件和实例)&period;

    一.概念 早期的 Java API 只支持由本地系统套接字库提供所谓的阻塞函数来支持网络编程.由于是阻塞 I/O ,要管理多个并发客户端,需要为每个新的客户端Socket 创建一个 Thread .这 ...

  8. 通用订单搜索的API设计得失录

    先把 Joshua Bloch 大神的 API PDF 放在这里膜拜下:"How to Design a Good API and Why it Matters.pdf" 总述 在 ...

  9. 配置完php&period;ini中的扩展库后&comma;重启apache出现错误1067

    网上有很多解决办法,比如更改环境变量,重装apache等等,但没有一个是符合我的.最后发现只是犯了一个低级错误,因为是第一次配置php.ini中的扩展库,忘记配置扩展库的路径. 解决办法:需要先加上扩 ...

  10. PHP-Redis操作

    /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...