vue_music:搜索search.vue

1. 经典搜索框search-box.vue

clipboard.png
通用组件的设计原则:解耦

1. 通过props,传递placeholder信息

  props: {
    placeholder: {
      type: String,
      default: '搜索歌曲、歌手'
    }
  },

2. 派发输入框中的输入值query

 created() {
    //优化:添加节流函数
    this.$watch('query', _debounce((newQuery) => {
      this.$emit('query', newQuery)
    }, 300))
  },

3. 移动端收起键盘

开始滚动的时候在移动端输入框的键盘收缩,由父组件search.vue中开始滚动派发的事件,调用该方法,参考图片

blur() {
  this.$refs.query.blur()
}

2. 搜索框下拉加载更多

clipboard.png

1. 滚动至底部派发事件

首先滚动至底部派发事件在scroll.vue组件中
这里是通过props,如果需要传值,则派发滚动至底部事件
伪代码:

//滚动开始派发事件
    beforeScroll: {
      type: Boolean,
      default: false
    }
    
    ....
 _initScroll() {
  this.scroll = new BScroll(this.$refs.wrapper, {
    probeType: this.probeType,
    click: this.click
  })

  //上拉刷新,滚动到底部派发一个事件
  if (this.pullup) {
    this.scroll.on('scrollEnd', () => {
      if (this.scroll.y <= (this.scroll.maxScrollY + 50)) {
        this.$emit('scrollToEnd')
      }
    })
  }
}

2.接收派发事件

在suggest.vue中接收派发事件

  • hasMore标志位进行判断,是否可以加载更多
  • page标记页码

clipboard.png

searchMore() {
  //当没有的时候停止加载
  if (!this.hasMore) {
    return
  }
  //页码page更改
  this.page++

  search(this.query, this.page, this.showSinger, perpage).then((res) => {
    if (res.code === ERR_OK) {
      //concat拼接
      this.result = this.result.concat(this._genResult(res.data))
      this._checkMore(res.data)
    }
  })
},
/**
     * 上拉刷新,是否还有数据
     */
_checkMore(data) {
  const song = data.song
  //如果没有song或者  加载的数量 >
  if (!song.list.length || (song.curnum + song.curpage * perpage) >= song.totalnum) {
    this.hasMore = false
  }
},
search() {
  //下次搜索的时候初始化
  this.page = 1
  this.$refs.suggest.scrollTo(0, 0)
  this.hasMore = true

  //search是请求接口数据方法
  search(this.query, this.page, this.showSinger, perpage).then((res) => {
    if (res.code === ERR_OK) {
      this.result = this._genResult(res.data)
      this._checkMore(res.data)
    }
  })
},

3. 搜索状态优化

  • 加载状态:loading组件
  • 搜索结果: no-result组件

clipboard.png

4. 滚动

滚动scroll.vue组件包含两部分数据:hotKey searchHistory,两部分数据需要通过计算属性computed组合concat起来,然后传入scroll.vue组件:data中
clipboard.png

5.优化

1. query变化

当query从有到无的时候,下面的dom结构display发生了改变,一次需要scroll刷新

<div ref="shortCutWrapper" class="shortcut-wrapper" v-show="!query">
   <scroll ref="scroll" class="shortcut" :data="shortcut">
</div>

在watch中,刷新scroll

watch: {
    query(newQuery) {
      if (!newQuery) {
        setTimeout(() => {
          this.$refs.scroll.refresh()
        }, 20)
      }
    }
},
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用vue-aplayer插件的示例代码: 引入依赖: 在项目中执行以下命令安装vue-aplayer插件: npm install vue-aplayer --save 在组件中引入插件: 在需要使用vue-aplayer的组件中,通过import语句引入插件: import Aplayer from 'vue-aplayer' 注册组件: 在组件的components选项中注册aplayer组件: components: { Aplayer } 在模板中使用: 在模板中使用aplayer组件,并传入相应的参数: <template> <div> <Aplayer autoplay :music="{ title: '剑心', artist: '张杰',***123 #### 引用[.reference_title] - *1* [Vue使用vue-apalyer实现音乐播放](https://blog.csdn.net/weixin_42707397/article/details/115394658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [vue-aplayer:一个基于vue2.x易于配置的音乐播放器控制组件](https://blog.csdn.net/weixin_34273481/article/details/88906750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [vue2.0 使用 vue-aplayer](https://blog.csdn.net/weixin_30487201/article/details/97350897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值