微信小程序首页的分类功能和搜索功能的实现思路及代码详解


Posted in Javascript onSeptember 11, 2018

就在昨天,微信宣布了微信小程序开发者工具新增“云开发”功能

下载最新的开发者工具,现在无需服务器即可实现小程序的快速迭代!

分类功能和搜素功能的效果图

微信小程序首页的分类功能和搜索功能的实现思路及代码详解

1.首页分类功能的实现

boxtwo方法(.js文件)

boxtwo: function (e) {
  var index = parseInt(e.currentTarget.dataset.index)
  this.setData({
   HomeIndex: index
  })
 },

当在首页点击 分类导航时,会触发这个方法,并传回当前点击时的index值。

这个方法实现的是将.wxml文件传来的index值赋给HomeIndex。

class="boxtwo-tab-nav {{HomeIndex == 0 ?'on':''}}"

.wxss样式文件

.boxtwo-tab-nav{
display: inline-block;
width: 20%;
height: 90rpx;
line-height: 90rpx;
border-bottom: 1rpx solid #ededed;
box-sizing: border-box;
text-align: center;
color: black;
font-size: 30rpx
}

这样就实现了首页 当前点击的分类 呈现出 被选中的样式。

然后在视图层根据HomeIndex的不同,加载对应的数据。

<view wx:if="{{HomeIndex == 1}}" >
  <block wx:for="{{shareList}}" wx:key="*this">
 <navigator url='../../pages/shareDetail/shareDetail?id={{item.id}}' hover-class="navigator-hover">
   <view class='imgs'>
    <image src="{{item.img}}" background-size="cover" mode="scaleToFill"></image>
   </view>
   <view class='infos'>
    <view class="title">{{item.title}}</view>
    <view class="date">{{item.cTime}}</view>
   </view>
  </navigator>
</block>
 </view>

<navigator></navigator>组件实现的是点击当前文章时传出id到详情页面(detail)。这样就把首页的文章列表和文章的详情页面一一对应起来了。

detail.js文件

onLoad: function (options) {
  var that = this
  wx.request({
   url: 'http://localhost:81/weicms/index.php?s=/addon/School/School/getDetail',
   data: {id:options.id},
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    wx.setStorage({
     key: 'info',
     data: res.data,
    })
    that.setData({
     info: res.data
    })
   }
  })
 
 }

2.搜索功能的实现

.wxml文件

<view class='search-view'>
  <input class='input' confirm-type="search" maxlength="30" bindinput='wxSearchInput' value='{{keyword}}' bindconfirm='wxSearchFn' bindfocus="wxSerchFocus" bindblur="wxSearchBlur" placeholder='请输入搜索内容'></input>
  <button class='search' bindtap="wxSearchFn" hover-class='button-hover'>搜索</button>
</view>

JavaScript indexOf() 方法

   indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

key为搜索的关键字,res.data[i].title为首页列表的标题。使用indexOf()方法时,当满足了(res.data[i].title.indexOf(key) >= 0)说明说明输入的关键字在文章列表中

也有相同的关键字,然后arr.push(res.data[i]),这样就把筛选出来的文章放在了临时数组arr中了

//搜索方法 key为用户输入的查询字段
 search: function (key) {
  /*console.log('搜索函数触发')*/
  var that = this;
  var newsList = wx.getStorage({
   key: 'newsList',
   success: function (res) {//从storage中取出存储的数据*/
   /*console.log(res)*/
    if (key == '') {//用户没有输入 全部显示
     that.setData({
      newsList: res.data
     })
     return;
    }
    var arr = [];//临时数组 用于存放匹配到的数据
    for (let i in res.data) {
     if (res.data[i].title.indexOf(key) >= 0) {//查找
      arr.push(res.data[i])
     }
    }
    if (arr.length == 0) {
     that.setData({
      newsList:[]
     })
    } else {
     that.setData({
      newsList: arr//在页面显示找到的数据
     })
    }
   }
  })
  }
//搜素时触发,调用search: function (key),传入输入的e.detail.value值
wxSearchInput: function (e) {
 this.search(e.detail.value);
}

index.wxml(首页)完整代码

<view class='search-view'>
  <input class='input' confirm-type="search" maxlength="30" bindinput='wxSearchInput' value='{{keyword}}' bindconfirm='wxSearchFn' bindfocus="wxSerchFocus" bindblur="wxSearchBlur" placeholder='请输入搜索内容'></input>
  <button class='search' bindtap="wxSearchFn" hover-class='button-hover'>搜索</button>
</view>
<view class="boxtwo-tab-nav {{HomeIndex == 0 ?'on':''}}" bindtap="boxtwo" data-index="0">首页</view>
  <view class="boxtwo-tab-nav {{HomeIndex == 1 ?'on':''}}" bindtap="boxtwo" data-index="1">资源分享</view>
  <view class="boxtwo-tab-nav {{HomeIndex == 2 ?'on':''}}" bindtap="boxtwo" data-index="2">微信小程序</view>
   <view class="boxtwo-tab-nav {{HomeIndex == 3 ?'on':''}}" bindtap="boxtwo" data-index="3">网赚小项目</view>
<view class="boxtwo-tab-nav {{HomeIndex == 4 ?'on':''}}" bindtap="boxtwo" data-index="4">共享经济</view>
<view class="wrap">
 <template name="lists">
  <navigator url='../../pages/detail/detail?id={{id}}' hover-class="navigator-hover">
   <view class='imgs'>
    <image src="{{img}}" background-size="cover" mode="scaleToFill"></image>
   </view>
   <view class='infos'>
    <view class="title">{{title}}</view>
    <view class="date">{{cTime}}</view>
   </view>
  </navigator>
 </template>
</view>
<view wx:if="{{HomeIndex == 0}}">
<block wx:for="{{newsList}}" wx:key="*this">
 <template is="lists" data="{{...item}}"/>
</block>
</view>
 <view wx:if="{{HomeIndex == 1}}" >
  <block wx:for="{{shareList}}" wx:key="*this">
 <navigator url='../../pages/shareDetail/shareDetail?id={{item.id}}' hover-class="navigator-hover">
   <view class='imgs'>
    <image src="{{item.img}}" background-size="cover" mode="scaleToFill"></image>
   </view>
   <view class='infos'>
    <view class="title">{{item.title}}</view>
    <view class="date">{{item.cTime}}</view>
   </view>
  </navigator>
</block>
 </view>
 <view wx:if="{{HomeIndex == 2}}" >
   <block wx:for="{{weixinList}}" wx:key="*this">
 <navigator url='../../pages/weixinDetail/weixinDetail?id={{item.id}}' hover-class="navigator-hover">
   <view class='imgs'>
    <image src="{{item.img}}" background-size="cover" mode="scaleToFill"></image>
   </view>
   <view class='infos'>
    <view class="title">{{item.title}}</view>
    <view class="date">{{item.cTime}}</view>
   </view>
  </navigator>
 </block>
 </view>
 <view wx:if="{{HomeIndex == 3}}" >
   <block wx:for="{{netearnList}}" wx:key="*this">
 <navigator url='../../pages/netearnDetail/netearnDetail?id={{item.id}}' hover-class="navigator-hover">
   <view class='imgs'>
    <image src="{{item.img}}" background-size="cover" mode="scaleToFill"></image>
   </view>
   <view class='infos'>
    <view class="title">{{item.title}}</view>
    <view class="date">{{item.cTime}}</view>
   </view>
  </navigator>
 </block>
 </view>
 <view wx:if="{{HomeIndex == 4}}" >
 <block wx:for="{{economyList}}" wx:key="*this">
 <navigator url='../../pages/economyDetail/economyDetail?id={{item.id}}' hover-class="navigator-hover">
   <view class='imgs'>
    <image src="{{item.img}}" background-size="cover" mode="scaleToFill"></image>
   </view>
   <view class='infos'>
    <view class="title">{{item.title}}</view>
    <view class="date">{{item.cTime}}</view>
   </view>
  </navigator>
 </block>
 </view>

 index.wxss(对应的样式文件)

.wrap{
 height: 100%;
 display:flex;
 flex-direction: column;
 padding: 20rpx
}
navigator{overflow: hidden}
.list{
 margin-bottom: 20rpx;
 height: 200rpx;
 position: relative;
}
.imgs{
 float: left;
}
.imgs image{
 display: block;
 width: 210rpx;
 height: 180rpx;
}
.boxtwo-tab-nav{
  display: inline-block;
  width: 20%;
  height: 90rpx;
  line-height: 90rpx;
  border-bottom: 1rpx solid #ededed;
  box-sizing: border-box;
  text-align: center;
  color: black;
  font-size: 30rpx
}
.on{
  color:#405F80;
  border-bottom: 5rpx solid #405F80;
}
.infos{
 float: left;
 width: 480rpx;
 height: 200rpx;
 padding: 20rpx 0 0 20rpx;
}
.date{
 font-size:13px;color:#aaa;position: absolute;
}
.title{font-size: 15px;}
.search{
 float: left;
 width: 130rpx;
 height: 70rpx;
 margin-left: 0;
 background-color: blueviolet;
 font-size: 28rpx;
 color: #fff;
 border: none;
}
.input{
 float: left;
 width: 500rpx;
 height: 70rpx;
 font-size: 35rpx;
 background-color: white;
}
.search-view{
 position: relative;
 overflow: hidden;
 height: 70rpx;
 padding: 20rpx 20rpx 25rpx 60rpx;
 background-color: #6699FF;
}
.button-hover {
 background-color: red;
}

.js文件(逻辑层)

Page({
 data:{
  newsList:[],
  HomeIndex: 0
 },
 onLoad: function () {
  var that = this;
  wx.request({
   url: 'http://localhost:81/weicms/index.php?s=/addon/School/School/getList',
   data: {},
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    console.log(res.data)
    wx.setStorage({
     key: 'newsList',
     data: res.data,
    })
    that.setData({
     newsList: res.data
    })
   }
  })
  wx.request({
   url: 'http://localhost:81/weicms/index.php?s=/addon/Share/Share/getList',
   data: {},
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    wx.setStorage({
     key: 'sharesList',
     data: res.data,
    })
    that.setData({
     shareList: res.data
    })
   }
  })
  wx.request({
   url: 'http://localhost:81/weicms/index.php?s=/addon/Weixin/Weixin/getList',
   data: {},
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    wx.setStorage({
     key: 'weixinList',
     data: res.data,
    })
    that.setData({
     weixinList: res.data
    })
   }
  })
  wx.request({
   url: 'http://localhost:81/weicms/index.php?s=/addon/Netearn/Netearn/getList',
   data: {},
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    wx.setStorage({
     key: 'netearnList',
     data: res.data,
    })
    that.setData({
     netearnList: res.data
    })
   }
  })
  wx.request({
   url: 'http://localhost:81/weicms/index.php?s=/addon/Economy/Economy/getList',
   data: {},
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    wx.setStorage({
     key: 'economyList',
     data: res.data,
    })
    that.setData({
     economyList: res.data
    })
   }
  })
 },
 //搜索方法 key为用户输入的查询字段
 search: function (key) {
  /*console.log('搜索函数触发')*/
  var that = this;
  var newsList = wx.getStorage({
   key: 'newsList',
   success: function (res) {//从storage中取出存储的数据*/
   /*console.log(res)*/
    if (key == '') {//用户没有输入 全部显示
     that.setData({
      newsList: res.data
     })
     return;
    }
    var arr = [];//临时数组 用于存放匹配到的数据
    for (let i in res.data) {
     if (res.data[i].title.indexOf(key) >= 0) {//查找
      arr.push(res.data[i])
     }
    }
    if (arr.length == 0) {
     that.setData({
      newsList:[]
     })
    } else {
     that.setData({
      newsList: arr//在页面显示找到的数据
     })
    }
   }
  })
  },
 //事件处理函数
 bindViewTap: function() {
  wx.navigateTo({
   url: '../logs/logs'
  })
 },
 wxSearchInput: function (e) {
 this.search(e.detail.value);
 console.log(e.detail.value)
 },
 wxSerchFocus: function (e) {
  this.search(e.detail.value);
 },
 wxSearchBlur: function (e) {
  this.search(e.detail.value);
 },
 wxSearchFn: function (e) {
  /*console.log(e)*/
 },
 boxtwo: function (e) {
  var index = parseInt(e.currentTarget.dataset.index)
  this.setData({
   HomeIndex: index
  })
 },

总结

以上所述是小编给大家介绍的微信小程序首页的分类功能和搜索功能的实现思路及代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
慎用 somefunction.prototype 分析
Jun 02 Javascript
javascript 短路法代码精简
Aug 20 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
jQuery实现复选框的全选和反选
Feb 02 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
JS实现头条新闻的经典轮播图效果示例
Jan 30 Javascript
JS实现处理时间,年月日,星期的公共方法示例
May 31 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 Javascript
jQuery实现简单轮播图效果
Dec 27 jQuery
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
vue项目中使用tinymce编辑器的步骤详解
Sep 11 #Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 #Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 #Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 #Javascript
js监听html页面的上下滚动事件方法
Sep 11 #Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 #Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 #Javascript
You might like
操作Oracle的php类
2006/10/09 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
基于jquery库的tab新形式使用
2012/11/16 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
运动会广播稿诗歌版
2014/09/12 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫
Python OpenCV实现图像模板匹配详解
2022/04/07 Python