| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | <template>  <el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll">    <slot />  </el-scrollbar></template><script>const tagAndTagSpacing = 4 // tagAndTagSpacingexport default {  name: 'ScrollPane',  data() {    return {      left: 0    }  },  computed: {    scrollWrapper() {      return this.$refs.scrollContainer.$refs.wrap    }  },  methods: {    handleScroll(e) {      const eventDelta = e.wheelDelta || -e.deltaY * 40      const $scrollWrapper = this.scrollWrapper      $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4    },    moveToTarget(currentTag) {      const $container = this.$refs.scrollContainer.$el      const $containerWidth = $container.offsetWidth      const $scrollWrapper = this.scrollWrapper      const tagList = this.$parent.$refs.tag      let firstTag = null      let lastTag = null      // find first tag and last tag      if (tagList.length > 0) {        firstTag = tagList[0]        lastTag = tagList[tagList.length - 1]      }      if (firstTag === currentTag) {        $scrollWrapper.scrollLeft = 0      } else if (lastTag === currentTag) {        $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth      } else {        // find preTag and nextTag        const currentIndex = tagList.findIndex(item => item === currentTag)        const prevTag = tagList[currentIndex - 1]        const nextTag = tagList[currentIndex + 1]        // the tag's offsetLeft after of nextTag        const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing        // the tag's offsetLeft before of prevTag        const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing        if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {          $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth        } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {          $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft        }      }    }  }}</script><style lang="scss" scoped>.scroll-container {  white-space: nowrap;  position: relative;  overflow: hidden;  width: 100%;  /deep/ {    .el-scrollbar__bar {      bottom: 0px;    }    .el-scrollbar__wrap {      height: 49px;    }  }}</style>
 |