項(xiàng)目反饋輸入框內(nèi)容比較多時(shí)候,讓鼠標(biāo)光標(biāo)在最后一個(gè)位置,心想什么奇葩需求,后面試了一下,是有點(diǎn)影響體驗(yàn),于是就有了下面的效果,我目前的項(xiàng)目都是若依的架子,用的是vue2版本。vue3的朋友想要使用,自行調(diào)節(jié)
效果圖如下:
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-643652.html
使用方法:
- 前提是指令被注冊(cè),代碼不顯示注冊(cè)內(nèi)容
<el-input v-focus2end v-model="dialog.form.actionSign" placeholder="請(qǐng)輸入" clearable />
v-focus2end 指令
- 還能繼續(xù)優(yōu)化,我就不想在操作了
/**
* Copyright ?
* # v-focus2end
* @author: zw
* @date: 2023-07-17
*/
export default {
inserted(el) {
const input = el instanceof HTMLInputElement ? el : el.querySelector('input')
input.addEventListener('focus', focusEventListener.bind(input), false)
input.addEventListener('blur', blurEventListener.bind(input), false)
el.__focusEventListener = focusEventListener
el.__blurEventListener = blurEventListener
},
unbind(el) {
const input = el instanceof HTMLInputElement ? el : el.querySelector('input')
input.removeEventListener('focus', el.__focusEventListener, false)
input.removeEventListener('blur', el.__blurEventListener, false)
},
}
function focusEventListener(e) {
e.preventDefault()
setTimeout(() => {
const inputLength = this.value.length
this.setSelectionRange(inputLength, inputLength)
smoothMove.call(this)
}, 300)
}
function blurEventListener() {
this.removeEventListener('focus', focusEventListener, false)
}
function smoothMove() {
const scrollMax = this.scrollWidth - this.clientWidth
const duration = 300
const startTime = performance.now()
function smoothScroll(timestamp) {
const elapsedTime = timestamp - startTime
const progress = Math.min(elapsedTime / duration, 1)
const scrollPosition = progress * scrollMax
this.scrollLeft = scrollPosition
if (elapsedTime < duration) {
requestAnimationFrame(smoothScroll.bind(this))
}
}
requestAnimationFrame(smoothScroll.bind(this))
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-643652.html
到了這里,關(guān)于編寫(xiě)一個(gè)指令(v-focus2end)使輸入框文本在聚焦時(shí)焦點(diǎn)在文本最后一個(gè)位置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!