1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { on, off } from 'element-ui/src/utils/dom';
- import { renderThumbStyle, BAR_MAP } from './util';
- /* istanbul ignore next */
- export default {
- name: 'Bar',
- props: {
- vertical: Boolean,
- size: String,
- move: Number
- },
- computed: {
- bar() {
- return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];
- },
- wrap() {
- return this.$parent.wrap;
- }
- },
- render(h) {
- const { size, move, bar } = this;
- return (
- <div
- class={ ['el-scrollbar__bar', 'is-' + bar.key] }
- onMousedown={ this.clickTrackHandler } >
- <div
- ref="thumb"
- class="el-scrollbar__thumb"
- onMousedown={ this.clickThumbHandler }
- style={ renderThumbStyle({ size, move, bar }) }>
- </div>
- </div>
- );
- },
- methods: {
- clickThumbHandler(e) {
- // prevent click event of right button
- if (e.ctrlKey || e.button === 2) {
- return;
- }
- this.startDrag(e);
- this[this.bar.axis] = (e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]));
- },
- clickTrackHandler(e) {
- const offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);
- const thumbHalf = (this.$refs.thumb[this.bar.offset] / 2);
- const thumbPositionPercentage = ((offset - thumbHalf) * 100 / this.$el[this.bar.offset]);
- this.wrap[this.bar.scroll] = (thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100);
- },
- startDrag(e) {
- e.stopImmediatePropagation();
- this.cursorDown = true;
- on(document, 'mousemove', this.mouseMoveDocumentHandler);
- on(document, 'mouseup', this.mouseUpDocumentHandler);
- document.onselectstart = () => false;
- },
- mouseMoveDocumentHandler(e) {
- if (this.cursorDown === false) return;
- const prevPage = this[this.bar.axis];
- if (!prevPage) return;
- const offset = ((this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1);
- const thumbClickPosition = (this.$refs.thumb[this.bar.offset] - prevPage);
- const thumbPositionPercentage = ((offset - thumbClickPosition) * 100 / this.$el[this.bar.offset]);
- this.wrap[this.bar.scroll] = (thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100);
- },
- mouseUpDocumentHandler(e) {
- this.cursorDown = false;
- this[this.bar.axis] = 0;
- off(document, 'mousemove', this.mouseMoveDocumentHandler);
- document.onselectstart = null;
- }
- },
- destroyed() {
- off(document, 'mouseup', this.mouseUpDocumentHandler);
- }
- };
|