UNPKG

vue-select

Version:

Everything you wish the HTML <select> element could do, wrapped up into a lightweight, extensible Vue component.

61 lines (55 loc) 1.44 kB
export default { props: { autoscroll: { type: Boolean, default: true, }, }, watch: { typeAheadPointer() { if (this.autoscroll) { this.maybeAdjustScroll() } }, open(open) { if (this.autoscroll && open) { this.$nextTick(() => this.maybeAdjustScroll()) } }, }, methods: { /** * Adjust the scroll position of the dropdown list * if the current pointer is outside of the * overflow bounds. * @returns {*} */ maybeAdjustScroll() { const optionEl = this.$refs.dropdownMenu?.children[this.typeAheadPointer] || false if (optionEl) { const bounds = this.getDropdownViewport() const { top, bottom, height } = optionEl.getBoundingClientRect() if (top < bounds.top) { return (this.$refs.dropdownMenu.scrollTop = optionEl.offsetTop) } else if (bottom > bounds.bottom) { return (this.$refs.dropdownMenu.scrollTop = optionEl.offsetTop - (bounds.height - height)) } } }, /** * The currently viewable portion of the dropdownMenu. * @returns {{top: (string|*|number), bottom: *}} */ getDropdownViewport() { return this.$refs.dropdownMenu ? this.$refs.dropdownMenu.getBoundingClientRect() : { height: 0, top: 0, bottom: 0, } }, }, }