程序思路:

  • 用微信自带组件swiper来实现轮播图
  • 用豆瓣提供的api(这里使用的电影api)来获取最近的电影数据【豆瓣api地址】
获取数据用微信的request方法,只需要提供豆瓣api的url链接,就能够get到数据
  • 用setData()方法来将数据存进对应的page里面,在视图层(html)用wx:for来进行列表渲染
  • 在渲染过程中加一个加载提示框(微信的showToast,API),等到数据请求并渲染完成后,结束提示框

1.app.js   获取用户登录状态并获取用户信息

  1. //app.js
  2. App({
  3. onLaunch: function () {
  4. //调用API从本地缓存中获取数据
  5. var logs = wx.getStorageSync('logs') || []
  6. logs.unshift(Date.now())
  7. wx.setStorageSync('logs', logs)
  8. },
  9. getUserInfo:function(cb){
  10. var that = this
  11. if(this.globalData.userInfo){
  12. typeof cb == "function" && cb(this.globalData.userInfo)
  13. }else{
  14. //调用登录接口
  15. wx.login({
  16. success: function () {
  17. wx.getUserInfo({
  18. success: function (res) {
  19. that.globalData.userInfo = res.userInfo
  20. typeof cb == "function" && cb(that.globalData.userInfo)
  21. }
  22. })
  23. }
  24. })
  25. }
  26. },
  27. globalData:{
  28. userInfo:null
  29. }
  30. })

2.app.json

  1. {
  2. "pages":[
  3. "pages/index/index",
  4. "pages/logs/logs"
  5. ],
  6. "window":{
  7. "backgroundTextStyle":"light",
  8. "color": "#fff",
  9. "navigationBarBackgroundColor": "#000",
  10. "navigationBarTitleText": "豆瓣",
  11. "navigationBarTextStyle":"#fff"
  12. },
  13. "tabBar": {
  14. "color": "#888",
  15. "selectedColor": "#09bb07",
  16. "backgroundColor": "#000",
  17. "list": [{
  18. "pagePath": "pages/index/index",
  19. "text": "观看电影",
  20. "iconPath": "icon/1.png",
  21. "selectedIconPath": "icon/1.png"
  22. },{
  23. "pagePath": "pages/index/index",
  24. "text": "当前热映",
  25. "iconPath": "icon/2.png",
  26. "selectedIconPath": "icon/2.png"
  27. }]
  28. }
  29. }

3.app.wxss

  1. /**app.wxss**/
  2. .container {
  3. height: 100%;
  4. display: flex;
  5. flex-direction: column;
  6. align-items: center;
  7. justify-content: space-between;
  8. padding: 200rpx 0;
  9. box-sizing: border-box;
  10. }

4.until.js

  1. function formatTime(date) {
  2. var year = date.getFullYear()
  3. var month = date.getMonth() + 1
  4. var day = date.getDate()
  5.  
  6. var hour = date.getHours()
  7. var minute = date.getMinutes()
  8. var second = date.getSeconds()
  9.  
  10. return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
  11. }
  12. //获取对象类型
  13. function formatNumber(n) {
  14. n = n.toString()
  15. return n[1] ? n : '0' + n
  16. }
  17.  
  18. module.exports = {
  19. formatTime: formatTime
  20. }

5.index.wxml

  1. <!--index.wxml-->
  2. <view class="content">
  3. <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
  4. <block wx:for="{{imgUrls}}">
  5. <swiper-item>
  6. <image src="{{item}}" class="slide-image" width="355" height="150" />
  7. </swiper-item>
  8. </block>
  9. </swiper>
  10. <block wx:for="{{movie}}" wx:key="*this">
  11. <view class="movie">
  12. <view class="pic">
  13. <image src="{{item.images.medium}}" mode="aspectFill"></image>
  14. </view>
  15. <view class="movie-info">
  16. <view class="base-info">
  17. <text>电影名字:{{item.title}}\n 导演:{{item.directors[0].name}}\n 演员:
  18. <text wx:for="{{item.casts}}">{{item.name}} </text>
  19. </text>
  20. </view>
  21. </view>
  22. </view>
  23. </block>
  24. </view>

6.index.wxss

  1. /**index.wxss**/
  2. page {
  3. height: 100%;
  4. }
  5. .content {
  6. background-color: #3a3a3a;
  7. min-height: 100%;
  8. }
  9. swiper-item image {
  10. width: 100%;
  11. }
  12. .movie {
  13. padding-top: 5px;
  14. padding-bottom: 5px;
  15. display: flex;
  16. border-bottom: 1px solid #888;
  17. }
  18. .pic image {
  19. width: 100px;
  20. height: 150px;
  21. vertical-align: top;
  22. }
  23. .movie-info {
  24. padding-left: 20px;
  25. }
  26. .base-info {
  27. color: #fff;
  28. font-size: 12px;
  29. padding-top: 20px;
  30. line-height: 20px;
  31. }

7.index.js

  1. //index.js
  2. //获取应用实例
  3. var app = getApp()
  4. Page({
  5. data: {
  6. imgUrls: [],
  7. indicatorDots: false,
  8. autoplay: true,
  9. interval: 5000,
  10. duration: 1000,
  11. movie: null
  12. },
  13. //事件处理函数
  14. bindViewTap: function () {
  15. },
  16. onLoad: function () {
  17. this.loadMovie();
  18. },
  19. loadMovie() {
  20. wx.showToast({
  21. title: '正在加载',
  22. icon: 'loading',
  23. duration: 10000
  24. });
  25. let thispage = this;
  26. wx.request({
  27. url: 'http://api.douban.com/v2/movie/in_theaters',
  28. method: 'GET',
  29. header: { 'content-type': 'json' },
  30. success: function (res) {
  31. let subject = res.data.subjects;
  32. thispage.setData({ movie: subject });
  33. thispage.setData({
  34. imgUrls: [
  35. res.data.subjects[0].images.large,
  36. res.data.subjects[1].images.large,
  37. res.data.subjects[2].images.large
  38. ]
  39. });
  40. wx.hideToast();
  41. }
  42. });
  43. }
  44. })

8.logs.wxml

  1. <!--logs.wxml-->
  2. <view class="container log-list">
  3. <block wx:for="{{logs}}" wx:for-item="log" wx:key="*this">
  4. <text class="log-item">{{index + 1}}. {{log}}</text>
  5. </block>
  6. </view>

9.logs.wxss

  1. .log-list {
  2. display: flex;
  3. flex-direction: column;
  4. padding: 40rpx;
  5. }
  6. .log-item {
  7. margin: 10rpx;
  8. }

10.logs.json

  1. {
  2. "navigationBarTitleText": "查看启动日志"
  3. }

11.logs.js

  1. //logs.js
  2. var util = require('../../utils/util.js')
  3. Page({
  4. data: {
  5. logs: []
  6. },
  7. onLoad: function () {
  8. this.setData({
  9. logs: (wx.getStorageSync('logs') || []).map(function (log) {
  10. return util.formatTime(new Date(log))
  11. })
  12. })
  13. }
  14. })

如何用微信小程序模仿豆瓣首页的更多相关文章

  1. 微信小程序访问豆瓣api403问题解决方发法

    微信小程序访问豆瓣api403问题解决方法一览:通过豆瓣api可以获取很多电影.书籍等的数据信息.昨晚上用微信小程序请求豆瓣api,竟然被豆瓣拒绝了.(豆瓣设置了小程序的访问权限):下面就跟着小编一起 ...

  2. 图解微信小程序---scroll_view实现首页排行榜布局

    图解微信小程序---scroll_view实现首页排行榜布局 什么是scroll-view? 滚动视图可滚动视图区域.使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 h ...

  3. 微信小程序demo豆瓣图书

    最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...

  4. 微信小程序访问豆瓣电影api400错误解决方法

    最近在跟着demo学习微信小程序,却卡在了第一步请求豆瓣电影api上,折腾了很久,代码如下: wx.request({ url : "https://api.douban.com/v2/mo ...

  5. 微信小程序 | 模仿百思不得其姐

    微信小程序 仿百思不得姐 设备 微信开发者工具 v1.02.1901230 扩展 修复了视频点击播放不流畅的问题 修复了视频的暂停够无法播放问题 优化了部分页面 接口 首页 http://api.bu ...

  6. 微信小程序 —— 仿制豆瓣(一)

    先预览一下效果 欢迎扫码查看 码云地址:https://gitee.com/mk_23/little_chen_xu.git 预览完成,首先进入app.json文件中配置参数,主要就是配置我们要用的页 ...

  7. 微信小程序之豆瓣电影

    此文是学习小程序第二天做出的一个小demo,调用了豆瓣电影的api,但是需要填上自己appId,现在项目的 目录如下图: 效果图如下: 在这个demo里面,我更改了小程序的navigationBar, ...

  8. 微信小程序访问豆瓣api报403错误解决方法

    通过豆瓣API可以获取很多电影.书籍的数据信息,今天在调用豆瓣正在上映电影接口的时候报403错误,原因是豆瓣设置了小程序的访问权限.如下: 解决方法是使用代理,将豆瓣API地址换成 https://d ...

  9. 如何用微信小程序,每天给自己赚个鸡腿?

    假期如果实在无聊的话,那跟随田同学的脚步上架一个小程序吧. 话说:谁不想拥有一个自己的小程序呢?既可以赚点小钱又可以长长见识. 不懂小程序的小白能不能做出来呢?那来对了,这个教程就是针对小白的. 今天 ...

随机推荐

  1. e812. 强制弹出菜单为重组件

    By default, Swing popup menus used by JMenu and JPopupMenu are lightweight. If heavyweight component ...

  2. c、c++---linux上的GetTickCount函数

    http://blog.csdn.net/guang11cheng/article/details/6865992 http://wenda.so.com/q/1378766306062794

  3. html固定宽度下拉框内容显示不全问题解决方法

    不少时候在页面中为了布局的需要,下拉列表<select>的宽度需要设成比较小的值,这时如果恰巧它包含的选择项<option>的内容比较长,那么超出select宽度的部分将会被截 ...

  4. Linux SSH实现无密码远程登录

      一.      SSH无密码远程登录原理 二.      SSH实现无密码远程登录 实现主机A 无密码远程登录主机B 主机A   IP地址:10.8.9.154 主机B   IP地址:10.8.9 ...

  5. C# Bitmap转化为BitmapImage方法

    public BitmapImage BitmapToBitmapImage(Bitmap bitmap) { Bitmap bitmapSource = new Bitmap(bitmap.Widt ...

  6. php json_decode无法解析特殊问好字符

    在通过别人接口请求信息的时候,偶尔会遇到由于部分字符,如以下情况,则通过json_decode是会返回null的 但是这种情况通常不是由于整体编码的问题,因为在解析的时候就是以utf-8的编码解析的 ...

  7. PHP数组排序函数array_multisort()函数详解(二)

    array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...

  8. unity3d 获取游戏对象详解

    原文地址:http://www.xuanyusong.com/archives/2768 我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能 ...

  9. SQL2000系统表、存储过程、函数的功能介绍及应用

    转自:http://blog.csdn.net/zlp321002/article/details/480925 ----系统表------------------------------------ ...

  10. 主调度器schedule

    中断处理完毕后,系统有三种执行流向:                                                                               1)直 ...