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

  • 更新时间:2022-11-24 15:31:58
  • 编辑:宫承天

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

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

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

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

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
  })
 },

总结

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

相关教程

  • 微信小程序loading组件显示载入动画实例用法

    这篇文章主要介绍了微信小程序loading组件显示载入动画用法,结合实例形式分析了loading组件显示载入动画的相关事件操作与属性设置技巧,并附带源码供读者下载参考,需要的朋友可以参考下

    发布时间:2021-05-25

  • 微信小程序修改本地缓存key中单个数据的方法代码

    这篇文章主要介绍了微信小程序如何修改本地缓存key中单个数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学

    发布时间:2020-01-18

  • 微信小程序三级联动选择器实例用法

    这篇文章主要为大家详细介绍了微信小程序三级联动选择器使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2019-10-08

  • 微信小程序的tab选项卡的实现效果

    这篇文章主要介绍了微信小程序的tab选项卡的实现效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-04-05

  • 微信小程序input框中加入小图标的实例代码

    这篇文章主要介绍了微信小程序input框中加入小图标的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    发布时间:2019-11-25

  • 微信小程序传值获取值的实例方法

    这篇文章主要介绍了微信小程序传值以及获取值方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2020-05-16

  • 微信小程序获取用户绑定手机号代码分享

    这篇文章主要给大家介绍了关于微信小程序如何获取用户绑定手机号的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下

    发布时间:2020-02-21

  • 微信小程序用户授权、位置授权及获取微信绑定手机号的实例分享

    这篇文章主要介绍了信小程序用户授权、位置授权及获取微信绑定手机号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    发布时间:2020-03-30

  • 汇总运用taro开发微信小程序遇到的坑

    Taro,京东凹凸实验室出品的适配多端的一个框架,这篇文章主要介绍了使用taro开发微信小程序遇到的坑总结,需要的朋友可以参考下

    发布时间:2020-01-16

用户留言