亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue自定義加水波紋效果指令實例代碼

 更新時間:2022年02月23日 11:56:08   作者:不吃魚d貓  
這篇文章主要給大家介紹了關于Vue自定義加水波紋效果指令的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

大家好,我是不吃魚d貓,過年以來。斷更許久,又回來了,學無止境,作為程序員知識是要不斷更新迭代的。在此期間,接觸了幾天的Vue,確實好用,今天給大家說個好玩的,在做項目過程中,點擊按鈕,大家肯定會接觸過很花的效果。接下來給大家說說水波紋效果。

自定義指令

指令的作用

言簡意賅,就是操作底層dom

當然vue自身有非常強大的指令功能,代替你進行dom操作,比如v-on綁定事件對不對,這應該大家熟悉的指令,100%要用到,畢竟js就是個事件驅動的語言。還有大家可以去官方文檔去看看

水波紋

水波紋效果

如上圖所示,點擊按鈕時鼠標四周會發(fā)散一個圓像水波一樣。

實現

原理

我們在點擊的時候,鼠標會發(fā)散一個圓,是不是有點擊事件觸發(fā)了,此時我們就增加一個span標簽,當然要給他設置寬高,等屬性,而且我們觀察,圓的顏色是慢慢沒有的,所以還有opacity屬性,還有span是不是跟隨鼠標移動的,所以還有添加定位屬性。

核心

注意發(fā)現,span發(fā)散的圓是不斷變大的,所以寬高是不斷變化的,變化,我們就能想到定時器,定時器里面就可以控制圓的寬高,讓span變化的屬性不斷有規(guī)律變化,當然要有臨界值,我們可以看看下圖

我們可以看看需求,水波紋,肯定是要覆整個按鈕的,那么span的發(fā)散半徑肯定就是按鈕中最大的距離,如圖所示,對角線肯定最長邊,一目了然。怎么求,在構造函數Math有個方法可以求Math.sqrt(a*a+b*b)所以span的寬高是2倍的最長距離。所以臨界值找到了,達到都就清除定時器,讓span的屬性不在變化。并且刪除span。

代碼實現

上面我們分析了分析,接下來我們用代碼實現。

結構:

 <div class="app">
        <h1>{{title}}</h1>
        <button v-shuibowen="">點我發(fā)散水波紋</button>
        <!-- <div class="box" v-shuibowen=""></div> -->
    </div>

實例化一個vue對象。

 const vm = new Vue({
            data: {
                title: "自定義指定設置水波紋"
            }
        }).$mount(".app")

自定義指令

 Vue.directive('shuibowen', {
                        //binding 指令攜帶的變量數據
            inserted: function(el, binding) {
                el.addEventListener('click', function(e) {
                    let x = e.clientX - el.offsetLeft
                    let y = e.clientY - el.offsetTop

                    //在鼠標位置增加一個span標簽
                    let span = document.createElement("span")
                    span.style.position = "absolute"
                    span.style.background = binding.value || 'rgba(150, 91, 91, .5)'
                    span.style.opacity = 1;
                    span.style.borderRadius = '50%'
                    el.append(span)
                    let width = 0
                    let height = 0
                    let opacity = 1
                    let max_length = Math.sqrt(el.offsetWidth * el.offsetWidth + el.offsetHeight * el.offsetHeight) * 2

                    let time = setInterval(() => {
                        width += 5
                        height += 5
                        opacity -= 0.01
                        //判斷超出最大值時,清除定時,并且刪除span
                        if (width < max_length) {
                            span.style.width = width + 'px'
                            span.style.height = height + 'px'
                            span.style.opacity = opacity;
                            span.style.left = x - span.offsetWidth / 2 + 'px'
                            span.style.top = y - span.offsetHeight / 2 + 'px'
                        } else {
                            clearInterval(time)
                            time = null;
                            span.remove()
                        }
                    }, 10)
                })

            }
        })

總結

剛接觸Vue,代碼沒有優(yōu)化,望見諒。自定義水波紋指令的好處就是,哪里需要用到水波紋的效果就往哪里加。

到此這篇關于Vue自定義加水波紋效果指令的文章就介紹到這了,更多相關Vue自定義水波紋指令內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vuejs在解析時出現閃爍的原因及防止閃爍的方法

    vuejs在解析時出現閃爍的原因及防止閃爍的方法

    這篇文章主要介紹了vuejs在解析時出現閃爍的原因及防止閃爍的方法,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • Vue 設置axios請求格式為form-data的操作步驟

    Vue 設置axios請求格式為form-data的操作步驟

    今天小編就為大家分享一篇Vue 設置axios請求格式為form-data的操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue + vuex todolist的實現示例代碼

    vue + vuex todolist的實現示例代碼

    這篇文章主要介紹了vue + vuex todolist的實現示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue3.0之引入Element-plus ui樣式的兩種方法

    Vue3.0之引入Element-plus ui樣式的兩種方法

    本文主要介紹了Vue3.0之引入Element-plus ui樣式的兩種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Vue實現輸入框回車發(fā)送和粘貼文本與圖片功能

    Vue實現輸入框回車發(fā)送和粘貼文本與圖片功能

    這篇文章主要為大家詳細介紹了Vue如何實現聊天輸入框回車發(fā)送、粘貼文本(包括HTML)、粘貼圖片等功能,文中的實現方法講解詳細,需要的可以參考一下
    2022-05-05
  • vue原理Compile從新建實例到結束流程源碼

    vue原理Compile從新建實例到結束流程源碼

    這篇文章主要為大家介紹了vue原理Compile從新建實例到結束流程源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 解決vue多個路由共用一個頁面的問題

    解決vue多個路由共用一個頁面的問題

    下面小編就為大家分享一篇解決vue多個路由共用一個頁面的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue組件選項props實例詳解

    Vue組件選項props實例詳解

    父組件通過 props 向下傳遞數據給子組件,子組件通過 events 給父組件發(fā)送消息。本文將詳細介紹Vue組件選項props,需要的朋友可以參考下
    2017-08-08
  • el-table-column 內容不自動換行的解決方法

    el-table-column 內容不自動換行的解決方法

    本文主要介紹了el-table-column 內容不自動換行的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Vue.js+Layer表格數據綁定與實現更新的實例

    Vue.js+Layer表格數據綁定與實現更新的實例

    下面小編就為大家分享一篇Vue.js+Layer表格數據綁定與實現更新的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論