Vue滑塊解鎖組件使用方法詳解
本文實(shí)例為大家分享了Vue滑塊解鎖組件的使用,供大家參考,具體內(nèi)容如下
依據(jù) JS拖動滑塊驗(yàn)證 開發(fā)的 Vue 滑塊解鎖組件。
<template> ? <div ref="wrap" class="slider-unlock"> ? ? <div class="before">請按住滑塊,拖動到最右邊</div> ? ? <div ref="after" class="after"> ? ? ? <div class="after-inner">{{ success?'驗(yàn)證成功':'請按住滑塊,拖動到最右邊' }}</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 ? ? ? // 設(shè)置after-inner的固定寬度 ? ? ? after.childNodes[0].style.width = wrap.offsetWidth + 'px' ? ? ? // 滑塊移動最大位置 ? ? ? const limit = wrap.offsetWidth - slider.offsetWidth ? ? ? // 實(shí)時計(jì)算滑塊的偏移量 ? ? ? let offsetX ? ? ? // 點(diǎn)擊滑塊時的鼠標(biāo)X位置 ? ? ? let initX ? ? ? // 頁面鼠標(biāo)移動事件 ? ? ? const docMousemoveHandler = e => { ? ? ? ? // 獲取移動后鼠標(biāo)實(shí)時位置 ? ? ? ? const moveX = e.clientX ? ? ? ? // 計(jì)算滑塊應(yīng)該移動的偏移量 ? ? ? ? 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) ? ? ? ? } ? ? ? } ? ? ? // 頁面鼠標(biāo)松開事件 ? ? ? const docMouseupHandler = e => { ? ? ? ? // 解綁事件 ? ? ? ? document.removeEventListener('mousemove', docMousemoveHandler) ? ? ? ? // 重置滑塊 ? ? ? ? if (offsetX < limit) { ? ? ? ? ? slider.style.left = 0 ? ? ? ? ? after.style.width = 0 ? ? ? ? } ? ? ? } ? ? ? // 滑塊點(diǎn)擊事件 ? ? ? const sliderMousedownHandler = e => { ? ? ? ? // 獲取鼠標(biāo)位置 ? ? ? ? initX = e.clientX ? ? ? ? // 綁定頁面的鼠標(biāo)移動事件 ? ? ? ? document.addEventListener('mousemove', docMousemoveHandler) ? ? ? } ? ? ? // 綁定滑塊點(diǎn)擊事件 ? ? ? slider.addEventListener('mousedown', sliderMousedownHandler) ? ? ? // 頁面鼠標(biāo)松開事件 ? ? ? 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" />
效果:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue利用mockjs編寫假數(shù)據(jù)并應(yīng)用的問題記錄
這篇文章主要介紹了Vue利用mockjs編寫假數(shù)據(jù)并應(yīng)用,本文通過實(shí)例代碼給大家詳細(xì)講解,對Vue?mockjs數(shù)據(jù)相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-12-12前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件詳解
這篇文章主要給大家介紹了關(guān)于前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件的相關(guān)資料,form-generator是一個開源的表單生成器,可以幫助我們快速構(gòu)建各種表單頁面,需要的朋友可以參考下2023-11-11關(guān)于Vue源碼vm.$watch()內(nèi)部原理詳解
這篇文章主要介紹了關(guān)于Vue源碼vm.$watch()內(nèi)部原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04vue axios調(diào)用接口方法報(bào)錯500 internal server err
前端使用axios 訪問后端接口時報(bào)錯,在瀏覽器中點(diǎn)擊紅色的報(bào)錯數(shù)據(jù),本文給大家分享vue axios調(diào)用接口方法報(bào)錯500 internal server error的兩種解決方法,感興趣的朋友一起看看吧2023-10-10vue3.0 CLI - 1 - npm 安裝與初始化的入門教程
這篇文章主要介紹了vue3.0 CLI - 1 - npm 安裝與初始化的入門教程,本文通過實(shí)例代碼相結(jié)合的形式,給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Vue cli+mui 區(qū)域滾動的實(shí)例代碼
下面小編就為大家分享一篇Vue cli+mui 區(qū)域滾動的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01vue攔截器實(shí)現(xiàn)統(tǒng)一token,并兼容IE9驗(yàn)證功能
這篇文章主要介紹了vue攔截器實(shí)現(xiàn)統(tǒng)一token,并兼容IE9驗(yàn)證功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-04-04