refactor[tagsView]: use el-scrollbar (#995)

This commit is contained in:
花裤衩 2018-08-31 14:01:07 +08:00 committed by GitHub
parent 6e569c4f4a
commit 68de01e828
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 40 deletions

View file

@ -1,9 +1,7 @@
<template> <template>
<div ref="scrollContainer" class="scroll-container" @wheel.prevent="handleScroll"> <el-scrollbar ref="scrollContainer" :vertical="false" class="scroll-container" @wheel.native.prevent="handleScroll">
<div ref="scrollWrapper" :style="{left: left + 'px'}" class="scroll-wrapper">
<slot/> <slot/>
</div> </el-scrollbar>
</div>
</template> </template>
<script> <script>
@ -18,41 +16,22 @@ export default {
}, },
methods: { methods: {
handleScroll(e) { handleScroll(e) {
const eventDelta = e.wheelDelta || -e.deltaY * 3 const eventDelta = e.wheelDelta || -e.deltaY * 40
const $container = this.$refs.scrollContainer const $scrollWrapper = this.$refs.scrollContainer.$refs.wrap
const $containerWidth = $container.offsetWidth $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4
const $wrapper = this.$refs.scrollWrapper
const $wrapperWidth = $wrapper.offsetWidth
if (eventDelta > 0) {
this.left = Math.min(0, this.left + eventDelta)
} else {
if ($containerWidth - padding < $wrapperWidth) {
if (this.left < -($wrapperWidth - $containerWidth + padding)) {
this.left = this.left
} else {
this.left = Math.max(this.left + eventDelta, $containerWidth - $wrapperWidth - padding)
}
} else {
this.left = 0
}
}
}, },
moveToTarget($target) { moveToTarget($target) {
const $container = this.$refs.scrollContainer const $container = this.$refs.scrollContainer.$el
const $containerWidth = $container.offsetWidth const $containerWidth = $container.offsetWidth
const $scrollWrapper = this.$refs.scrollContainer.$refs.wrap
const $targetLeft = $target.offsetLeft const $targetLeft = $target.offsetLeft
const $targetWidth = $target.offsetWidth const $targetWidth = $target.offsetWidth
if ($targetLeft > $containerWidth) {
if ($targetLeft < -this.left) {
// tag in the left
this.left = -$targetLeft + padding
} else if ($targetLeft + padding > -this.left && $targetLeft + $targetWidth < -this.left + $containerWidth - padding) {
// tag in the current view
// eslint-disable-line
} else {
// tag in the right // tag in the right
this.left = -($targetLeft - ($containerWidth - $targetWidth) + padding) $scrollWrapper.scrollLeft = $targetLeft - $containerWidth + $targetWidth + padding
} else {
// tag in the left
$scrollWrapper.scrollLeft = $targetLeft - padding
} }
} }
} }
@ -65,8 +44,13 @@ export default {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
.scroll-wrapper { /deep/ {
position: absolute; .el-scrollbar__bar {
bottom: 0px;
}
.el-scrollbar__wrap {
height: 49px;
}
} }
} }
</style> </style>

View file

@ -123,11 +123,12 @@ export default {
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
.tags-view-container { .tags-view-container {
.tags-view-wrapper {
background: #fff;
height: 34px; height: 34px;
width: 100%;
background: #fff;
border-bottom: 1px solid #d8dce5; border-bottom: 1px solid #d8dce5;
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);
.tags-view-wrapper {
.tags-view-item { .tags-view-item {
display: inline-block; display: inline-block;
position: relative; position: relative;
@ -143,6 +144,9 @@ export default {
&:first-of-type { &:first-of-type {
margin-left: 15px; margin-left: 15px;
} }
&:last-of-type {
margin-right: 15px;
}
&.active { &.active {
background-color: #42b983; background-color: #42b983;
color: #fff; color: #fff;