关于在watch中监控scrollY(new)的问题

来源:5-6 listview 基础组件的开发和应用-右侧快速入口实现(2)

milaiduoduo

2017-11-23

scrollY(newY){
  const listHeight = this.listHeight;
  if (newY > 0) {
    this.currentIndex = 0;
    return;
  }
  for (let i = 0; i < listHeight.length - 1; i++) {
    let height1 = listHeight[i];
    let height2 = listHeight[i + 1];
    if (-newY >= height1 && -newY < height2) {
      this.currentIndex = i;
      return;
    }
  }
  this.currentIndex = listHeight.length - 2;
}

以上这段可以不用watch来监控,因为这段完全可以写在 scroll暴露出来的scroll事件中,如下。所以说,这只是写法不同,还是写在watch中,另有原因?

scroll(pos){
  this.scrollY = pos.y;
  this._getNewIndexInleftList();
},
_getNewIndexInleftList(){
  const listHeight = this.listHeight;
  let newY = this.scrollY;
  if (newY > 0) {
    this.currentIndex = 0;
    return;
  }
  for (let i = 0; i < listHeight.length - 1; i++) {
    let height1 = listHeight[i];
    let height2 = listHeight[i + 1];
    if (-newY >= height1 && -newY < height2) {
      this.currentIndex = i;
      return;
    }
  }
  this.currentIndex = listHeight.length - 2;
}


写回答

1回答

ustbhuangyi

2017-11-23

scollY 的改动并不只是在滚动的时候,点右侧列表也会有,而 scrollY 的改变会影响视图,所以从数据驱动的角度来说, watch 它的变化更合理

0
0

Vue2.0高级应用教学实战,开发企业级移动端音乐Web App

Vue.js高级知识应用大集合,实战企业级APP,教你搞定组件化开发。

5432 学习 · 3804 问题

查看课程