最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue封裝圖片滑塊驗證組件的方法

 更新時間:2022年03月31日 11:49:47   作者:guanguan0_0  
這篇文章主要為大家詳細(xì)介紹了vue封裝圖片滑塊驗證組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue封裝圖片滑塊驗證組件的具體代碼,供大家參考,具體內(nèi)容如下

滑塊驗證組件整體不難,主要在于設(shè)置圖片的樣式問題,想要讓背景圖充滿div,就需要滑塊圖片也跟隨等比放大,效果與代碼如下:

HTML:

<template>
? <section class="slider-section">
? ? <div class="img-box">
? ? ? <img :src="'data:image/png;base64,' + sliderData.bigImg" class="bg-img" ref="bgImg" />
? ? ? <img :src="'data:image/png;base64,' + sliderData.smallImg" class="slider-img" ref="sliderImg" />
? ? </div>
? ? <div class="slider-box">
? ? ? <span class="slider-text">向右滑動滑塊填充拼圖</span>
? ? ? <div class="slider-icon" @mousedown="rangeMove">></div>
? ? </div>
? </section>
</template>

JS:

<script>
export default {
? props: ['sliderData'], // 父組件傳入的滑塊數(shù)據(jù)對象
? watch: {
? ? sliderData: { // 監(jiān)聽滑塊數(shù)據(jù)變化,重置滑塊位置
? ? ? handler (newVal, oldVal) {
? ? ? ? if (newVal) {
? ? ? ? ? this.init()
? ? ? ? }
? ? ? },
? ? ? deep: true
? ? }
? },
? data () {
? ? return {
? ? ? disX: 0 // 滑塊距離背景圖左側(cè)的位置
? ? }
? },
? mounted () {
? ? this.init()
? },
? methods: {
? ? // 初始化滑塊的位置
? ? init () {
? ? ? this.disX = 0 // 初始化滑塊位置
? ? ? let bigImg = new Image() // 創(chuàng)建背景圖片
? ? ? bigImg.src = "data:image/png;base64," + this.sliderData.bigImg
? ? ? bigImg.onload = () => {
? ? ? ? let originWidth = bigImg.width ?// 獲取原始背景圖片的寬度
? ? ? ? let widthRate = this.$refs.bgImg.width / originWidth // 背景圖片渲染后的實際寬度/原始圖片寬度
? ? ? ? let smallImg = new Image() // 創(chuàng)建滑塊圖片
? ? ? ? smallImg.src = "data:image/png;base64," + this.sliderData.smallImg
? ? ? ? this.$refs.sliderImg.src = 'data:image/png;base64,' + this.sliderData.smallImg // 設(shè)置滑塊圖片地址
? ? ? ? this.$refs.sliderImg.style.width = smallImg.width * widthRate + 'px' ?// 設(shè)置滑塊圖片寬度
? ? ? ? this.$refs.sliderImg.style.top = this.sliderData.smallY * this.$refs.bgImg.height + 'px' ?// 設(shè)置滑塊距離背景圖頂部的距離
? ? ? ? this.$refs.sliderImg.style.left = 0 ?// 設(shè)置滑塊距離背景圖左側(cè)的距離
? ? ? }
? ? },
? ? // 移動事件觸發(fā)
? ? rangeMove (e) {
? ? ? let ele = e.target
? ? ? let startX = e.clientX
? ? ? let eleWidth = ele.offsetWidth
? ? ? let parentWidth = ele.parentElement.offsetWidth
? ? ? let MaxX = parentWidth - eleWidth
? ? ? document.onmousemove = (e) => {
? ? ? ? let endX = e.clientX
? ? ? ? this.disX = endX - startX
? ? ? ? this.$refs.sliderImg.style.left = this.disX + 'px'
? ? ? ? if (this.disX <= 0) {
? ? ? ? ? this.disX = 0
? ? ? ? ? this.$refs.sliderImg.style.left = 0
? ? ? ? }
? ? ? ? if (this.disX >= MaxX - eleWidth) {//減去滑塊的寬度,體驗效果更好
? ? ? ? ? this.disX = MaxX
? ? ? ? ? this.$refs.sliderImg.style.left = (parentWidth - this.$refs.sliderImg.width) + 'px'
? ? ? ? }
? ? ? ? ele.style.transition = '.1s all'
? ? ? ? ele.style.transform = 'translateX(' + this.disX + 'px)'
? ? ? ? e.preventDefault()
? ? ? }
? ? ? document.onmouseup = () => {
? ? ? ? this.$emit('submitPic', this.disX / parentWidth) // 停止滑動事件冒泡給父級
? ? ? ? setTimeout(() => {
? ? ? ? ? ele.style.transition = '.5s all'; // 初始化滑塊位置
? ? ? ? ? ele.style.transform = 'translateX(0)';
? ? ? ? }, 200)
? ? ? ? document.onmousemove = null
? ? ? ? document.onmouseup = null
? ? ? }
? ? }
? }
}
</script>

CSS:

<style scoped lang="less">
.slider-section {
? margin: 20px 0;
? .img-box {
? ? position: relative;
? ? .bg-img {
? ? ? width: 100%;
? ? }
? ? .slider-img {
? ? ? position: absolute;
? ? ? left: 0;
? ? ? top: 0;
? ? }
? }
?
? .slider-box {
? ? margin-top: 20px;
? ? background: #f7f9fa;
? ? color: #666;
? ? border: 1px solid #e4e7eb;
? ? position: relative;
? ? height: 30px;
? ? width: 100%;
? ? &:hover {
? ? ? box-shadow: 0 0 3px #ccc;
? ? }
? ? .slider-text {
? ? ? font-size: 14px;
? ? ? position: absolute;
? ? ? top: 50%;
? ? ? left: 50%;
? ? ? transform: translate(-50%, -50%);
? ? }
? ? .slider-icon {
? ? ? width: 30px;
? ? ? height: 30px;
? ? ? background: #c8923a;
? ? ? text-align: center;
? ? ? font-size: 20px;
? ? ? color: #fff;
? ? ? box-shadow: 0 0 6px #ccc;
? ? }
? }
}
</style>

注:使用的是mousedown、onmousemove 、onmouseup 事件,僅支持PC端,如果要在移動端使用,需要把這些事件改成touch等;

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue 實現(xiàn)Web端的定位功能 獲取經(jīng)緯度

    vue 實現(xiàn)Web端的定位功能 獲取經(jīng)緯度

    這篇文章主要介紹了vue 實現(xiàn)Web端的定位功能獲取經(jīng)緯度,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 淺談vue+vite項目部署會遇到的幾個問題

    淺談vue+vite項目部署會遇到的幾個問題

    本文主要介紹了vue+vite項目部署會遇到的幾個問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue中實現(xiàn)權(quán)限管理詳解

    Vue中實現(xiàn)權(quán)限管理詳解

    這篇文章主要介紹了Vue中實現(xiàn)權(quán)限管理詳解,權(quán)限是對特定資源的訪問許可,所謂權(quán)限控制,也就是確保用戶只能訪問到被分配的資源,而前端權(quán)限歸根結(jié)底是請求的發(fā)起權(quán),請求的發(fā)起可能有下面兩種形式觸發(fā),需要的朋友可以參考下
    2023-08-08
  • vue3輸入框生成的時候如何自動獲取焦點詳解

    vue3輸入框生成的時候如何自動獲取焦點詳解

    記錄一下自己最近開發(fā)vue3.0的小小問題,下面這篇文章主要給大家介紹了關(guān)于vue3輸入框生成的時候如何自動獲取焦點的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Vue自定義指令獲取不到參數(shù)的原因及解決

    Vue自定義指令獲取不到參數(shù)的原因及解決

    這篇文章主要介紹了Vue自定義指令獲取不到參數(shù)的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue使用自定義指令實現(xiàn)按鈕權(quán)限展示功能

    vue使用自定義指令實現(xiàn)按鈕權(quán)限展示功能

    這篇文章主要介紹了vue中使用自定義指令實現(xiàn)按鈕權(quán)限展示功能,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 關(guān)于vue-color-顏色選擇器插件

    關(guān)于vue-color-顏色選擇器插件

    這篇文章主要介紹了關(guān)于vue-color-顏色選擇器插件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue項目引發(fā)的「過濾器」使用教程

    Vue項目引發(fā)的「過濾器」使用教程

    這篇文章主要給大家介紹了關(guān)于Vue項目引發(fā)的「過濾器」使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 使用Vue開發(fā)一個實時性時間轉(zhuǎn)換指令

    使用Vue開發(fā)一個實時性時間轉(zhuǎn)換指令

    我們就來實現(xiàn)這樣一個Vue自定義指令v-time,將表達(dá)式傳入的時間戳實時轉(zhuǎn)換為相對時間。下面小編給大家?guī)砹耸褂肰ue開發(fā)一個實時性時間轉(zhuǎn)換指令,需要的朋友參考下吧
    2018-01-01
  • Vue過濾器使用方法詳解

    Vue過濾器使用方法詳解

    過濾器的功能是對要顯示的數(shù)據(jù)進(jìn)行格式化后再顯示,其并沒有改變原本的數(shù)據(jù),只是產(chǎn)生新的對應(yīng)的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Vue中過濾器定義以及使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-12-12

最新評論

都安| 安丘市| 宾川县| 扎兰屯市| 石嘴山市| 平果县| 普宁市| 农安县| 从化市| 安吉县| 丰宁| 马尔康县| 淮南市| 宜川县| 恩施市| 漠河县| 修水县| 抚松县| 三原县| 德惠市| 济宁市| 红原县| 湟源县| 铁岭县| 辽阳市| 天峻县| 池州市| 老河口市| 石首市| 乐安县| 柯坪县| 鄂托克前旗| 隆安县| 天等县| 卢氏县| 遂昌县| 黑水县| 阿克陶县| 岳阳市| 洛宁县| 札达县|