template部分

<ul ref='tabsRef'>
	<li  class="all-style">全部</li>
	<li class="other-tab" @click="tabsOnclick($event)" v-for="item in datas">{{item}}</li>
</ul>

data部分

data{
	return{
		datas:[
		'文学',
		'外国名著',
		'中国名著',
		'四大名著',
		'历史地理'
		]
	}
}
	

methods方法

tabsOnclick(e){
this.tabsClickScroll('tabsRef', e)
}	

tabsClickScroll(refDom, e) {
      let scrollLeft= null
      let scrollRight = null
      let moveDistance = null
      const clientWidthHalf = this.$refs[refDom].clientWidth / 2

      // e.layerX获取元素相对refDom元素的位置
      moveDistance = clientWidthHalf - e.layerX

      scrollLeft= moveDistance
      scrollRight = -(moveDistance)
      
	 // 获取当前元素所在元素的中间位置
      const currentMiddleHalf = (this.$refs[refDom].clientWidth + e.target.offsetWidth) / 2
      // 点击左侧
      // layerX 鼠标相比较于当前坐标系的位置,即如果触发元素没有设置绝对定位或相对定位,以页面为参考点,如果有,将改变参考坐标系
      if (e.layerX <= currentMiddleHalf) {
        this.$refs[refDom].scrollLeft -= scrollLeft
      } else {
      // 点击右侧
        this.$refs[refDom].scrollLeft += scrollRight 
      }

      const res= this.$refs[refDom].scrollLeft >= 0 ? this.$refs[refDom].scrollLeft : 0
      this.$refs[refDom].scrollLeft = res
    }
Logo

前往低代码交流专区

更多推荐