如何用微信小程序模仿豆瓣首页
程序思路:
- 用微信自带组件swiper来实现轮播图
- 用豆瓣提供的api(这里使用的电影api)来获取最近的电影数据【豆瓣api地址】
获取数据用微信的request方法,只需要提供豆瓣api的url链接,就能够get到数据
- 用setData()方法来将数据存进对应的page里面,在视图层(html)用wx:for来进行列表渲染
- 在渲染过程中加一个加载提示框(微信的showToast,API),等到数据请求并渲染完成后,结束提示框
1.app.js 获取用户登录状态并获取用户信息
- //app.js
- App({
- onLaunch: function () {
- //调用API从本地缓存中获取数据
- var logs = wx.getStorageSync('logs') || []
- logs.unshift(Date.now())
- wx.setStorageSync('logs', logs)
- },
- getUserInfo:function(cb){
- var that = this
- if(this.globalData.userInfo){
- typeof cb == "function" && cb(this.globalData.userInfo)
- }else{
- //调用登录接口
- wx.login({
- success: function () {
- wx.getUserInfo({
- success: function (res) {
- that.globalData.userInfo = res.userInfo
- typeof cb == "function" && cb(that.globalData.userInfo)
- }
- })
- }
- })
- }
- },
- globalData:{
- userInfo:null
- }
- })
2.app.json
- {
- "pages":[
- "pages/index/index",
- "pages/logs/logs"
- ],
- "window":{
- "backgroundTextStyle":"light",
- "color": "#fff",
- "navigationBarBackgroundColor": "#000",
- "navigationBarTitleText": "豆瓣",
- "navigationBarTextStyle":"#fff"
- },
- "tabBar": {
- "color": "#888",
- "selectedColor": "#09bb07",
- "backgroundColor": "#000",
- "list": [{
- "pagePath": "pages/index/index",
- "text": "观看电影",
- "iconPath": "icon/1.png",
- "selectedIconPath": "icon/1.png"
- },{
- "pagePath": "pages/index/index",
- "text": "当前热映",
- "iconPath": "icon/2.png",
- "selectedIconPath": "icon/2.png"
- }]
- }
- }
3.app.wxss
- /**app.wxss**/
- .container {
- height: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: space-between;
- padding: 200rpx 0;
- box-sizing: border-box;
- }
4.until.js
- function formatTime(date) {
- var year = date.getFullYear()
- var month = date.getMonth() + 1
- var day = date.getDate()
- var hour = date.getHours()
- var minute = date.getMinutes()
- var second = date.getSeconds()
- return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
- }
- //获取对象类型
- function formatNumber(n) {
- n = n.toString()
- return n[1] ? n : '0' + n
- }
- module.exports = {
- formatTime: formatTime
- }
5.index.wxml
- <!--index.wxml-->
- <view class="content">
- <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}">
- <block wx:for="{{imgUrls}}">
- <swiper-item>
- <image src="{{item}}" class="slide-image" width="355" height="150" />
- </swiper-item>
- </block>
- </swiper>
- <block wx:for="{{movie}}" wx:key="*this">
- <view class="movie">
- <view class="pic">
- <image src="{{item.images.medium}}" mode="aspectFill"></image>
- </view>
- <view class="movie-info">
- <view class="base-info">
- <text>电影名字:{{item.title}}\n 导演:{{item.directors[0].name}}\n 演员:
- <text wx:for="{{item.casts}}">{{item.name}} </text>
- </text>
- </view>
- </view>
- </view>
- </block>
- </view>
6.index.wxss
- /**index.wxss**/
- page {
- height: 100%;
- }
- .content {
- background-color: #3a3a3a;
- min-height: 100%;
- }
- swiper-item image {
- width: 100%;
- }
- .movie {
- padding-top: 5px;
- padding-bottom: 5px;
- display: flex;
- border-bottom: 1px solid #888;
- }
- .pic image {
- width: 100px;
- height: 150px;
- vertical-align: top;
- }
- .movie-info {
- padding-left: 20px;
- }
- .base-info {
- color: #fff;
- font-size: 12px;
- padding-top: 20px;
- line-height: 20px;
- }
7.index.js
- //index.js
- //获取应用实例
- var app = getApp()
- Page({
- data: {
- imgUrls: [],
- indicatorDots: false,
- autoplay: true,
- interval: 5000,
- duration: 1000,
- movie: null
- },
- //事件处理函数
- bindViewTap: function () {
- },
- onLoad: function () {
- this.loadMovie();
- },
- loadMovie() {
- wx.showToast({
- title: '正在加载',
- icon: 'loading',
- duration: 10000
- });
- let thispage = this;
- wx.request({
- url: 'http://api.douban.com/v2/movie/in_theaters',
- method: 'GET',
- header: { 'content-type': 'json' },
- success: function (res) {
- let subject = res.data.subjects;
- thispage.setData({ movie: subject });
- thispage.setData({
- imgUrls: [
- res.data.subjects[0].images.large,
- res.data.subjects[1].images.large,
- res.data.subjects[2].images.large
- ]
- });
- wx.hideToast();
- }
- });
- }
- })
8.logs.wxml
- <!--logs.wxml-->
- <view class="container log-list">
- <block wx:for="{{logs}}" wx:for-item="log" wx:key="*this">
- <text class="log-item">{{index + 1}}. {{log}}</text>
- </block>
- </view>
9.logs.wxss
- .log-list {
- display: flex;
- flex-direction: column;
- padding: 40rpx;
- }
- .log-item {
- margin: 10rpx;
- }
10.logs.json
- {
- "navigationBarTitleText": "查看启动日志"
- }
11.logs.js
- //logs.js
- var util = require('../../utils/util.js')
- Page({
- data: {
- logs: []
- },
- onLoad: function () {
- this.setData({
- logs: (wx.getStorageSync('logs') || []).map(function (log) {
- return util.formatTime(new Date(log))
- })
- })
- }
- })
如何用微信小程序模仿豆瓣首页的更多相关文章
- 微信小程序访问豆瓣api403问题解决方发法
微信小程序访问豆瓣api403问题解决方法一览:通过豆瓣api可以获取很多电影.书籍等的数据信息.昨晚上用微信小程序请求豆瓣api,竟然被豆瓣拒绝了.(豆瓣设置了小程序的访问权限):下面就跟着小编一起 ...
- 图解微信小程序---scroll_view实现首页排行榜布局
图解微信小程序---scroll_view实现首页排行榜布局 什么是scroll-view? 滚动视图可滚动视图区域.使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 h ...
- 微信小程序demo豆瓣图书
最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...
- 微信小程序访问豆瓣电影api400错误解决方法
最近在跟着demo学习微信小程序,却卡在了第一步请求豆瓣电影api上,折腾了很久,代码如下: wx.request({ url : "https://api.douban.com/v2/mo ...
- 微信小程序 | 模仿百思不得其姐
微信小程序 仿百思不得姐 设备 微信开发者工具 v1.02.1901230 扩展 修复了视频点击播放不流畅的问题 修复了视频的暂停够无法播放问题 优化了部分页面 接口 首页 http://api.bu ...
- 微信小程序 —— 仿制豆瓣(一)
先预览一下效果 欢迎扫码查看 码云地址:https://gitee.com/mk_23/little_chen_xu.git 预览完成,首先进入app.json文件中配置参数,主要就是配置我们要用的页 ...
- 微信小程序之豆瓣电影
此文是学习小程序第二天做出的一个小demo,调用了豆瓣电影的api,但是需要填上自己appId,现在项目的 目录如下图: 效果图如下: 在这个demo里面,我更改了小程序的navigationBar, ...
- 微信小程序访问豆瓣api报403错误解决方法
通过豆瓣API可以获取很多电影.书籍的数据信息,今天在调用豆瓣正在上映电影接口的时候报403错误,原因是豆瓣设置了小程序的访问权限.如下: 解决方法是使用代理,将豆瓣API地址换成 https://d ...
- 如何用微信小程序,每天给自己赚个鸡腿?
假期如果实在无聊的话,那跟随田同学的脚步上架一个小程序吧. 话说:谁不想拥有一个自己的小程序呢?既可以赚点小钱又可以长长见识. 不懂小程序的小白能不能做出来呢?那来对了,这个教程就是针对小白的. 今天 ...
随机推荐
- e812. 强制弹出菜单为重组件
By default, Swing popup menus used by JMenu and JPopupMenu are lightweight. If heavyweight component ...
- c、c++---linux上的GetTickCount函数
http://blog.csdn.net/guang11cheng/article/details/6865992 http://wenda.so.com/q/1378766306062794
- html固定宽度下拉框内容显示不全问题解决方法
不少时候在页面中为了布局的需要,下拉列表<select>的宽度需要设成比较小的值,这时如果恰巧它包含的选择项<option>的内容比较长,那么超出select宽度的部分将会被截 ...
- Linux SSH实现无密码远程登录
一. SSH无密码远程登录原理 二. SSH实现无密码远程登录 实现主机A 无密码远程登录主机B 主机A IP地址:10.8.9.154 主机B IP地址:10.8.9 ...
- C# Bitmap转化为BitmapImage方法
public BitmapImage BitmapToBitmapImage(Bitmap bitmap) { Bitmap bitmapSource = new Bitmap(bitmap.Widt ...
- php json_decode无法解析特殊问好字符
在通过别人接口请求信息的时候,偶尔会遇到由于部分字符,如以下情况,则通过json_decode是会返回null的 但是这种情况通常不是由于整体编码的问题,因为在解析的时候就是以utf-8的编码解析的 ...
- PHP数组排序函数array_multisort()函数详解(二)
array_multisort()这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列 例如array_multisort($a,$b),$a,$b是两个数组,如果排 ...
- unity3d 获取游戏对象详解
原文地址:http://www.xuanyusong.com/archives/2768 我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能 ...
- SQL2000系统表、存储过程、函数的功能介绍及应用
转自:http://blog.csdn.net/zlp321002/article/details/480925 ----系统表------------------------------------ ...
- 主调度器schedule
中断处理完毕后,系统有三种执行流向: 1)直 ...