Vue滑塊解鎖組件使用方法詳解
本文實例為大傢分享瞭Vue滑塊解鎖組件的使用,供大傢參考,具體內容如下
依據 JS拖動滑塊驗證 開發的 Vue 滑塊解鎖組件。
<template> <div ref="wrap" class="slider-unlock"> <div class="before">請按住滑塊,拖動到最右邊</div> <div ref="after" class="after"> <div class="after-inner">{{ success?'驗證成功':'請按住滑塊,拖動到最右邊' }}</div> </div> <div ref="slider" class="slider" :class="{'is-success': success}" /> </div> </template> <script> export default { name: 'SliderUnlock', data() { return { success: false, clear: null, } }, mounted() { this.init() }, beforeDestroy() { this.clear && this.clear() }, methods: { init() { // 獲取 dom const after = this.$refs.after const slider = this.$refs.slider const wrap = this.$refs.wrap // 設置after-inner的固定寬度 after.childNodes[0].style.width = wrap.offsetWidth + 'px' // 滑塊移動最大位置 const limit = wrap.offsetWidth - slider.offsetWidth // 實時計算滑塊的偏移量 let offsetX // 點擊滑塊時的鼠標X位置 let initX // 頁面鼠標移動事件 const docMousemoveHandler = e => { // 獲取移動後鼠標實時位置 const moveX = e.clientX // 計算滑塊應該移動的偏移量 offsetX = moveX - initX // 限制上下限 if (offsetX < 0) { offsetX = 0 } else if (offsetX > limit) { offsetX = limit } // 移動滑塊 slider.style.left = offsetX + 'px' // 修改高亮背景寬度 after.style.width = offsetX + 'px' if (offsetX >= limit) { this.success = true this.$emit('success') document.removeEventListener('mousemove', docMousemoveHandler) slider.removeEventListener('mousedown', sliderMousedownHandler) } } // 頁面鼠標松開事件 const docMouseupHandler = e => { // 解綁事件 document.removeEventListener('mousemove', docMousemoveHandler) // 重置滑塊 if (offsetX < limit) { slider.style.left = 0 after.style.width = 0 } } // 滑塊點擊事件 const sliderMousedownHandler = e => { // 獲取鼠標位置 initX = e.clientX // 綁定頁面的鼠標移動事件 document.addEventListener('mousemove', docMousemoveHandler) } // 綁定滑塊點擊事件 slider.addEventListener('mousedown', sliderMousedownHandler) // 頁面鼠標松開事件 document.addEventListener('mouseup', docMouseupHandler) // 定義清理方法 this.clear = () => { document.removeEventListener('mousemove', docMousemoveHandler) slider.removeEventListener('mousedown', sliderMousedownHandler) document.removeEventListener('mouseup', docMouseupHandler) } }, }, } </script> <style lang="less" scoped> .slider-unlock{ height: 45px; background: #E1E1E1; border-radius: 4px; position: relative; overflow: hidden; border: 1px solid #CCCCCC; box-sizing: border-box; user-select: none; .before, .after { position: absolute; margin: -1px 0 0 -1px; top: 0; left: 0; z-index: 1; height: 100%; box-sizing: content-box; font-size: 14px; font-weight: bold; line-height: 43px; text-align: center; } .before { width: 100%; color: #333; padding: 0 1px 1px 0; } .after { width: 0; overflow: hidden; padding: 0 0 1px 0; &-inner { position: absolute; width:100%; height: 100%; color: #fff; background-color: #40C057; } } .slider{ position: absolute; margin: -1px 0 0 -1px; top: 0; left: 0; z-index: 3; width: 70px; height: 45px; border: 1px solid #CCC; cursor: pointer; background: no-repeat center center #fff; background-image: url(~@/imgs/icon-allow-right.png); &.is-success { background-image: url(~@/imgs/icon-success.png); } } } </style>
使用:
<SliderUnlock @success="handler" />
效果:
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。