微信小程序demo——小说阅读器


博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020
作业要求 https://edu.cnblogs.com/campus/zjcsxy/SE2020/homework/11334
作业代码 https://github.com/Harperyy/book-reading
学号 31801099
姓名 杨清倩

前言

这是一个非常简易的小说阅读器,由于第一次接触小程序,只是一个雏形,数据量并不多,样式设计上也十分粗糙,只能完成最基础的功能。(该小程序的大量数据都存在云开发提供的数据库。)

设计思路及要求

要求如下:

  • 通过男女生频道来选择想要的书
  • 在频道页面可以通过简介来选择小说
  • 可以搜索关键字来搜索想要的小说
  • 可以添加小说
  • 在首页会有小说推荐

设计思路:
首先是首页的设计,之后逐步完成各个页面的布局设计,最后在写js,实现各个页面的跳转和各种操作。

各页面介绍

所有的页面都存在pages文件夹中

首页

由三部分组成,上半部分滑动的页面会显示热门推荐的小说,通过选择来进入不同频道。首页的设计参考了一个植物图鉴的小程序,主要以简洁方便为主。虽然是有参考的代码,但仍需不小的改动。通过首页的设计,我逐渐了解到小程序基本的开发流程,包括界面样式设计的各种技巧以及js的编写。可以说,在完成首页的同时,我才真正入门了。

index.wxml

<import src="family-item/family-item-temp.wxml"/>
<view >
  <swiper indicator-dots="true" autoplay="true" interval="5000" width="200rpx">
    <swiper-item><image src="/img/family/timg.jpg"></image></swiper-item>
    <swiper-item><image src="/img/family/timg 2.jpg"></image></swiper-item>
  </swiper>
  <view class="tt">
    <text>--- ----- ---</text>
  </view>
  <view class="pai">
    <block  wx:for="{{familyKey}}" wx:for-item="item">
    <view catchtap="toGenus" data-family-id="{{item.familyId}}">
      <template is="familyItem" data="{{...item}}"></template>
    </view>
    </block>
  </view>
   
</view>

index.js

var faData = require("../../data/family.js");

Page({
  data: {
  },
  toGenus:function(event){
    var fId = event.currentTarget.dataset.familyId;
    var urlto="";
    if (fId == "f01"){
      urlto = '../male/male?fid=' + fId;
    }else{
      urlto = '../female/female?fid=' + fId ;
    }

    wx.navigateTo({
      url: urlto
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({familyKey:faData.familys});
  },

  onShareAppMessage: function (res) {
       
  }
})

男女频道页面

该页面会显示该频道的所有小说以及小说文案
以女生频道为例

female.wxml

<view>
  <view class="tt">
    
    <text>--- 女生频道 ---</text>
  </view>
  <view class="pai">
    <block wx:for="{{genKey}}" wx:for-item="item">
    
    <view class="family" catchtap="toSpecies" data-gen-id="{{item.genId}}">
     <view class="imag">
      <image src="{{item.genImg}}"></image>
      <text>{{item.genName}}</text>
     </view>
     <view class="intro">
      <text>{{item.intro}}</text>
     </view>
    </view>

  </block>
  </view>
</view>

female.js

var genData = require("../../data/female.js");
Page({
  data: {

  },
  toSpecies: function (event) {
    var gid = event.currentTarget.dataset.genId;
      wx.navigateTo({
        url: '../tujian-family/sp/sp?gid='+gid
      })
  },
  onLoad: function (options) {
    var fid = "female_" + options.fid;
    var gens = genData[fid];

    this.setData({ genKey: gens });
  },

  onShareAppMessage: function () {

  }
})

小说界面

由于数据量太大,该页面无法直接可以阅读小说,只提供百度云链接

sp.wxml

<view>
  <view class="title-container">
   
    <text class="fgName" > {{genName}}</text>
    <image src="{{genImg}}" mode="aspectFit"></image>
  </view>
  <view class="intro">
    <text>{{intro}}</text>
    
  </view>
  <view class="tt">
    
    <text>--- 正文 ---</text>
  </view>
  <view class="content">
    <text>{{context}}</text>
    
  </view>
</view>

sp.js

var speData = require("../../../data/female.js");
Page({
  data: {
  },
  onLoad: function (options) {
    var gid = options.gid;
    var spes = speData["female_f02"];
    var spedetail;
    spes.forEach(function (e) {
      if (e.genId==gid){
        spedetail=e;
      }
    });
    console.log(spedetail);
    this.setData(spedetail);
  },


  onShareAppMessage: function () {

  }
})

搜索界面

搜索功能是基于云开发的数据库。这一功能费了比较多的时间,首先是搜索框的设计,这个比较容易;然后就是连数据库及其查询修改。在连数据库的过程中,有许多问题。有些问题实在是太低级了,比如数据库权限没开,导致一直连不上,一直到最后才发现这个问题差点崩溃。还有一些问题就比较常规,经过百度以及一些博文,很快能解决。

search.wxml

<view>
     <view>
        <view class="weui-search-bar">
            <view class="weui-search-bar__form">
            <!-- 搜索框 -->
                <view class="weui-search-bar__box">
                    <icon class="weui-icon-search_in-box" type="search" size="14"></icon>
                    <input type="text" class="weui-search-bar__input" placeholder="请输入搜索内容"bindinput="searchInput"/>
                </view>
            </view>
            <view class="weui-search-bar__cancel-btn" bindtap='searchBook'>搜索</view>
        </view>
    </view>
    <view>
      <text>{{context}}</text>
    </view>
</view>

search.js

wx.cloud.init({
  env:"yqq-3g0xquwqdd5bcff3",
  traceUser: true
})
const db = wx.cloud.database()

Page({
  data: {
      inputValue:'',
      context:''
  },
  onLoad: function (options) {

  },
    searchInput: function(e) {
    this.setData({
      inputValue: e.detail.value
    })
  },
  // 查询搜索的接口方法
  searchBook: function (e) {
    var that = this;
    db.collection('book').where({
      bookname:this.data.inputValue
    })
    .get({
      success: function(res) {
        console.log(res.data[0].context)
        that.setData({
          context: res.data[0].context
        })
        that.onLoad()
      }
    })
  
  }
})

数据文件data

数据文件又来存储大部分数据的链接

以女生小说为例
female.js

var female_f02=[
  {
    familyId: "f02",
    genId: "f02g01",
    genName: "十年一品温如言",
    intro:"当一切开始的时候,将来的我们,把它冠作,过去。她说,我的过去,与你们相同。从一个人,再回归到一个人的宿命。只是,留下一个无法消除的牙印,噬在喉头,再深一寸,致命。",
    genImg: "cloud://yqq-3g0xquwqdd5bcff3.7971-yqq-3g0xquwqdd5bcff3-1303928640/十年.jpg"
  },
  {
    familyId: "f02",
    genId: "f02g02",
    genName: "三生三世枕上书",
    intro:"有一句话是情深缘浅,情深是她,缘浅是她和东华。 有一个词是福薄,她福薄,所以遇到他,他福薄,所以错过她。 “你说我只是个宠物,我走的时候,你也没有挽留我。” “为什么我尤其需要你的时候,你都恰好不在呢",
    genImg: "cloud://yqq-3g0xquwqdd5bcff3.7971-yqq-3g0xquwqdd5bcff3-1303928640/ss.jpg"
  },
  {
    familyId: "f02",
    genId: "f02g03",
    genName: "东宫",
    intro:"我还没有走到光华门,就忽然听到众人的惊叫,无数人喧哗起来,还有人大叫:“承天门失火啦!” 我以为我听错了,我同所有人一样往南望去,只见承天门上隐约飘起火苗,斗拱下冒出浓重的黑烟,所有人掩口惊呼,",
    genImg: "cloud://yqq-3g0xquwqdd5bcff3.7971-yqq-3g0xquwqdd5bcff3-1303928640/东宫.jpg"
  },
  {
    familyId: "f02",
    genId: "f02g04",
    genName: "半是蜜糖半是伤",
    intro:"你要相信,这世间总有一段情会让你刻骨铭心,哪怕是要经历八十一难的暗恋。她是职场上的女王,生活上的傲娇妹子,外型上的霸气御姐,心理上的变形金刚。他是职场上的霸王,生活上的毒舌汉子,外型上的不羁爷们,心理上的无敌超人。",
    genImg: "cloud://yqq-3g0xquwqdd5bcff3.7971-yqq-3g0xquwqdd5bcff3-1303928640/蜜糖.jpg"
  },
  
]
module.exports = {
    female_f02
  }

总结

通过这次demo的制作,让我了解到了小程序开发的基本流程。虽然制作十分粗糙,但也花费了很多时间。期间遇到很多问题,由于对小程序的不熟悉,一些错误没有那么敏感,需要花费很多时间去debug。不过熟能生巧,这个demo做下来,明显进步很多,能尽量规避一些低级错误。还有就是,一定一定要保持清醒的头脑,并且将不同文件放在不同文件中,否则分分钟搞混。样式class在取名字方面也要严谨,这次就是乱取,结果搞得头昏。

优化

这个只是一个非常简易的小程序,优化的空间很大。其实在一开始我也有很多设想,比如可以利用爬虫在不同网站上爬到小说;可以建立一个社区,大家可以讨论分享,甚至可以提供资源;在搜索方面可以更加人性化,可以搞个热门小说排行榜;在推荐小说方面,可以通过用户评论,兴趣爱好来推荐。最后就是,界面设计美化,这个demo实在是丑陋,希望之后可以加强前端的技术。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM