热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序--搜索电影app

code:点击做完“天气预报”之后就尝试做“豆瓣电影app”了,学到不少东西,下面是详细步骤:各个页面效果如下图所示:

    code:点击  

    做完“天气预报”之后就尝试做“豆瓣电影app”了,学到不少东西,下面是详细步骤:

     各个页面效果如下图所示:

 


        看起来还可以吧,接下来先到豆瓣api官网看看,网址:https://developers.douban.com/wiki/?title=api_v2。

如下图所示,一步一步来做准备工作,都是现成的 API ,调用还是挺方便的。





大致目录结构如下:


好了,了解完各个页面需要调用的 API 之后,先进行简单的页面布局,一个一个来做,先来贴首页(正在热映)的布局代码,后面几个页面的布局都可以公用这份代码的!

hotMovies.wxml 文件代码如下:


  
  
    
      
        
      
    
  
  
     
     
  
  
  
    
      
        
      
      
        
          名称:{{item.title}}
        
        {{item.rating.average}}分
        
          类型:
          
            {{type}},
            
          
        
        
          导演:
          
            {{director.name}},
          
        
        
          演员:
          
            {{actor.name}},
          
        
        年份: {{item.year}}
      
    
  


hotMovies.wxss 文件代码如下:

/**htoMovies.wxss**/
.wrapper{
  padding:0;
  margin:0;
  width:100%;
  height:100%;
}
.slide-image{
  width:750rpx;
  height:100%;
}
.search{
  position: absolute;
  left:0;
  top:-20rpx;
  width:100%;
  height:92rpx;
  display: flex;
  flex-direction: row;
}
input{
  height:1rem;
  flex-grow: 1; /**剩余空间都给我*/
  line-height: 70rpx;
  border:2rpx solid #ccc;
  margin:20rpx;
  border-radius: 10rpx;
  font-size: 0.8rem;
}
button{
  color:#0ff;
  width:130rpx;
  height:50rpx;
  line-height: 50rpx;
  margin:24rpx 30rpx 0rpx 0rpx;
  font-size: 0.8rem;
}
.content{
  width:100%;
  height:300rpx;
  padding:10rx;
  display: flex;
  flex-direction: row;
  border-bottom: 2rpx solid #CCCCCC;
}
.picView{
  float:left;
  padding:20rpx 15rpx;
}
.pic{
  width:210rpx;
  height:260rpx;
}
.info{
  float:left;
  display: flex;
  flex-direction: column;
  color:#888888;
  padding-top:20rpx;
  font-size: 30rpx;
}
.name{
  color:#000;
  width:100%;
  font-size: 32rpx;
  margin-bottom: -19rpx;
}
.score{
  position: relative;
  width:80rpx;
  float:right;
  top:-18rpx;
  color:#8C5A0D;
  right:-433rpx;
}
.type{
  display: flex;
  flex-direction: row;
  margin-bottom: 10rpx;
}
.director{
  display: flex;
  flex-direction: row;
  margin-bottom: 10rpx;  
}
.actor{
  margin-bottom: 10rpx;
}


hotMovies.js 文件代码如下:

//hotMovies.js
//获取应用实例
var app = getApp()
Page({
  data: {
    imgUrls: [
      '../../assets/imgs/1.jpg',
      '../../assets/imgs/2.jpg',
      '../../assets/imgs/3.jpg'
    ],
    indicatorDots: true,
    autoplay: true,
    interval: 5000,
    duration: 1000,
    indicatorColor: '#ff0',
    indicatorActivedColor: '#f00',
  },
  //事件处理函数
  bindViewTap: function () {
    wx.navigateTo({
      url: '../recommendMovies/recommendMovies'
    })
  },
  onLoad: function () {
    console.log('onLoad')
    var that = this;
    //调用应用实例的方法获取全局数据
    app.getUserInfo(function (userInfo) {
      //更新数据
      that.setData({

      })
    });
    that.requestHotMovies();
  },
  requestHotMovies: function (event) {
    var keyword = null;
    if(event){//点击了搜索按钮才有此值
      keyword = event.currentTarget.dataset.keyword;
    }
    var city = keyword ? keyword : '广州'; 
    console.log('city:'+city);
    var that = this;
    var url = 'https://api.douban.com/v2/movie/in_theaters';
    var data = {
      city: city
    };
    console.log('0:'+wx.getStorageSync('city'));
    wx.setStorageSync('city', city); //覆盖原来key的内容。
    console.log('1:' +wx.getStorageSync('city'));
    var hotMovies;
    //如果本地已经存储就不再请求
    hotMovies = wx.getStorageSync('hotMovies'+city);
    if (!hotMovies) {
      wx.request({
        url: url, //请求api的接口地址
        data: data,//传递的参数
        header: {
          'content-type': 'json'//不能写"application/json"否则报400错误。
        },
        success: function (res) {//请求数据成功后才执行的回调函数。
          /*console.log(res.data.subjects);*/
          hotMovies = res.data.subjects;
          console.log(hotMovies);
          that.setData({/**放在外部没效果,因为还没执行成功就分配了数据结果是空数据 */
            hotMovies: hotMovies
          });
          that.saveData(hotMovies,city);//第一次请求之后存储数据在本地
        }
      });
    }
    else {
      console.log(hotMovies);
      that.setData({
        hotMovies: hotMovies
      });
    }
  },
  toDetail: function (event) {//参数:事件对象
    console.log(event);
    wx.navigateTo({
      url: '/pages/detail/detail?id=' + event.currentTarget.id,
    })
  },
  saveData: function (data,city) {
    wx.setStorage({
      key: 'hotMovies'+city,
      data: data,
    })
  },
  keyword:function(event){
     this.setData({
	    keyword:event.detail.value /**获取input输入的值并设置到搜索值 */
	 });	  
  },
})


主要运用到了 swiper 组件进行图片的轮播,wx.request 组件请求 api 接口,获取正在热映电影的 api 接口地址为:

https://api.douban.com/v2/movie/in_theaters?city=yourCity。

用到了 for 循环等,注意for循环用来循环比较好,不要用,不然后者相当于

,会占据块空间,导致某些时候布局不便。用了 input 组件进行输入搜索关键字,还有 button 组件等等。

点击电影图片跳到详情页面用到了wx.navigateTo({ url:'urlPath' });方法。

因为考虑到频繁请求 api 接口有次数限制,所以我将第一次获取到的数据保存在本地,以后直接使用而不是重复请求,不过这样有个问题就是当它更新时数据不会更新过来,因为是“死”数据了,还没去尝试解决。要注意的一点时,请求 wx.request 时,header:{ 'conten-type':'json' }不能写成 'application/json' 不然会一直报400错误,应该是版本问题。

保存数据:key->data

wx.setStorage({
      key: 'hotMovies'+city,
      data: data,
    })
若要覆盖key的原来存放的值,使用
wx.setStorageSync('key', data);
读入数据:key
var data = wx.getStorageSync('key');

未完待续!






推荐阅读
  • 微信小程序中如何实现轮播图
    这篇文章主要介绍了微信小程序中如何实现轮播图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带 ... [详细]
  • 上一章我们设置了分类页面的页面标签,这一章我们继续标签设置格局。话不多说标签设置格局,我们一起操练起来吧~ ... [详细]
  • 微信小程序新手教程wx.request(object) API
    微信小程序新手教程wx.request(object)API,本篇默认已经成功安装微信小程序工具,来和小编一起看看吧wx.request(object)API这里通过干活集中营的A ... [详细]
  • 小程序中如何实现弹出菜单功能
    这篇文章给大家分享的是有关小程序中如何实现弹出菜单功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需求点击 ... [详细]
  • 微信小程序开发二三事
    怎么添加背景照片index页面文件夹下上传背景图片 ... [详细]
  • 微信小程序实现简易计算器功能_javascript技巧
    这篇文章主要为大家详细介绍了微信小程序实现简易计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 知晓推送正式上线!送你 13 亿条模板消息
    「知晓推送」能帮助小程序运营人员有效解决粉丝转化、消息推送、数据分析等多个层面的麻烦事,让小程序推广难、留存差的问题从此成为过去式。在服务上线的这个重要的日子里,贴心的小云专门向” ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • XSS 漏洞绕过
    Web安全攻防学习笔记 ... [详细]
  • 微信小程序:弹窗组件封装popup.wxml ... [详细]
  • 1.有事会出现小程序的页面超出屏幕,导致横向和纵向溢出,这时候在wxss文件中加入overflow:hidden来隐藏溢出屏幕的部分。.container{background:# ... [详细]
  • 微信小程序Demo导入的示例分析
    小编给大家分享一下微信小程序Demo导入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 微信小程序地图实现展示线路的方法
    这篇文章将为大家详细讲解有关微信小程序地图实现展示线路的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所 ... [详细]
  • 微信小程序实现星级评分与展示
    这篇文章主要为大家详细介绍了微信小程序实现星级评分与展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 以前都是用php开发微信公众号,很少有人用java来做,我用java来做了一个微信小程序的后台,前端是一个微信商城,没有开发完,但是已经封装了取得openid,wechat-master目录 ... [详细]
author-avatar
A_2na轻奢主义总店访烟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有