zoukankan      html  css  js  c++  java
  • 小程序实现单词查询搜索及搜索的历史记录

    内容包含单词短语搜索释义、搜索历史、推荐搜索、音频播放、随机抽取方法
    效果如图

    话不多说,先上代码

    1、HTML

    <input name="text" type='text' class="text" bindinput="getText" value="{{inputValue}}" bindconfirm="toSearch" placeholder='请输入要查询的单词或短语' bindfocus="historyList" />
    <!-- 推荐搜索 -->
    <view class="history" hidden='{{!hidden}}'>
      <view class="historyTitle">{{historyList == '' ? '推荐搜索' : '历史搜索'}}</view>
      <block wx:if="{{historyList == ''}}" wx:key="{{randomList}}" wx:for="{{randomList}}">
        <view class="historyList" data-key="{{item}}" bindtap="historySearch">{{item}}</view>
      </block>
      <block wx:if="{{historyList !== ''}}" wx:key="{{historyList}}" wx:for="{{historyList}}" wx:if="{{ index < 5 }}">
        <view class="historyList" data-key="{{item}}" bindtap="historySearch">{{item}}</view>
      </block>
    </view>

    2、js

    onShow: function () {
        const that = this
        wx.getStorage({
          key: 'historyList',
          success: function(res) {
            console.log('缓存获取成功')
            that.setData({
              historyList: res.data
            })
          },
          fail: function () {
            console.log('缓存获取失败')
            that.setData({
              //本地的一组单词数据
              randomList: util.getRandom(that.data.randomWord, 5)
            })
          }
        })
        
      },
      //获取焦点时展示搜索记录
      historyList: function () {
        this.setData({
          hidden: true,
          inputValue: ''
        })
      },
      //历史列表点击搜索方法
      historySearch: function (e) {
        const that = this
        const text = e.currentTarget.dataset.key
        console.log(text)
        that.setData({
          text: text
        }, ()=> {
          that.toSearch()
        })
      },
      //获取单词释义
      toSearch: function () {
        const word = this.data.text
        const that = this
        //直接入栈即可,使用let返回的是长度值报错
        that.data.historyList.unshift(word)
        console.log("word-->" + word)
        //扇贝API获取单词释义
        wx.request({
          url: 'https://api.shanbay.com/bdc/search/?word=' + word,
          data: {},
          method: 'GET',
          success: function (res) {
            console.log("单词释义-->" + res.data)
            that.setData({
              content: res.data,
              hidden: false,
              historyList: that.data.historyList
            })
          },
          fail: function () {
            wx.showModal({
              title: '',
              content: '网络错误',
              showCancel: false,
              success: function (res) {
    
              }
            })
          }
        })
      },
      //播放音频
      playAudio: function () {
        const innerAudioContext = wx.createInnerAudioContext()
        innerAudioContext.autoplay = true
        innerAudioContext.src = this.data.content.data.audio_addresses.us[0]
        innerAudioContext.onPlay(() => {
          console.log('开始播放')
        })
        //循环播放bug 需播放完后销毁音频
        innerAudioContext.onStop(() => {
          innerAudioContext.destroy()
        })
        //播放错误时输出错误,销毁音频重新播放
        innerAudioContext.onError((res) => {
          console.log(res.errMsg)
          console.log(res.errCode)
          innerAudioContext.destroy()
        })
      },
      //获取表单数据
      getText: function (e) {
        this.setData({
          text: e.detail.value,
          hidden: true
        })
      },
      //清空表单数据
      clearInput: function () {
        this.setData({
          typeValue: '',
          text: ''
        })
      },
      //设置搜索缓存
      searchStorage: function () {
        const that = this
        console.log('退出页面')
        wx.setStorage({
          key: 'historyList',
          data: that.data.historyList,
          success: function () {
            console.log('缓存成功')
          }
        })
      },
      onHide: function () {
        this.searchStorage()
      },
      onUnload: function () {
        this.searchStorage()
      }

    3、util.js中的随机抽取方法 

    //随机抽取单词
    const getRandom = function (arr, count) {
      let shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
      while (i-- > min) {
        index = Math.floor((i + 1) * Math.random());
        temp = shuffled[index];
        shuffled[index] = shuffled[i];
        shuffled[i] = temp;
      }
      return shuffled.slice(min);
    }

    原理:通过setStorage和getStorage方法来讲搜索记录保存至本地并读取显示,与推荐搜索交替进行<br>

    单词搜索为扇贝API,商用需自行解决API收费问题

    <br>
    <br>


    作者:zzppff
    Github链接:https://github.com/zzppff/zzppff-miniprogram
    原创方法,商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/zzppff/p/10362648.html
Copyright © 2011-2022 走看看