欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS利用?clip-path?實現(xiàn)動態(tài)區(qū)域裁剪功能

 更新時間:2021年12月16日 10:55:18   作者:ChokCoco  
這篇文章主要介紹了JS利用?clip-path?實現(xiàn)動態(tài)區(qū)域裁剪功能,文中主要通過使用 box-shadow 實現(xiàn),代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

背景

今天逛 CodePen,看到了這樣一個非常有意思的效果:

CodePen Demo -- Material Design Menu By Bennett Feely

這個效果還是有一些值得探討學習的點,下面我們一起來看看。

如何實現(xiàn)這樣一個類似的效果?

首先,想一想,如果讓你去實現(xiàn)上面的效果,你會怎么做呢?

這里我簡單羅列一些可能的辦法:

  • 陰影 box-shadow
  • 漸變 radial-gradient
  • 縮放 transform: scale()

快速的一個一個過一下。

使用 box-shadow 實現(xiàn)

如果使用 box-shadow,代碼大致如下:

<div class="g-container">
    <div class="g-item"></div>
</div>
.g-container {
    position: relative;
    width: 400px;
    height: 300px;
    overflow: hidden;
}

.g-item {
    position: absolute;
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: #fff;
    top: 20px;
    left: 20px;
    box-shadow: 0 0 0 0 #fff;
    transition: box-shadow .3s linear;
    
    &:hover {
        box-shadow: 0 0 0 420px #fff;
    }
}

核心就在于:

  • 外層一個設置了 overflow: hideen 的遮罩
  • 內層元素 hover 的時候,實現(xiàn)一個 box-shadow: 0 0 0 0 #fffbox-shadow: 0 0 0 420px #fff 的變化

效果如下:

整體的動畫是模擬出來了,但是它最致命的問題有兩個:

  • 當我們的鼠標離開圓形的時候,整個動畫就開始反向進行了,白色區(qū)域開始消失,如果我們要進行按鈕操作,是無法完成的
  • 隱藏在動畫展開后的矩形內的元素,不容易放置

所以,box-shadow 看著雖好,但是只能放棄。上述 Demo 的代碼 -- CodePen Demo -- box-shadow zoom in animation

使用漸變 radial-gradient 實現(xiàn)

下面我們使用徑向漸變 radial-gradient 加上 CSS @property,也可以還原上述效果:

<div class="g-container"></div>
@property --size {
  syntax: '<length>';
  inherits: false;
  initial-value: 24px;
}

.g-container {
    position: relative;
    width: 400px;
    height: 300px;
    overflow: hidden;
    background: radial-gradient(circle at 44px 44px, #fff 0, #fff var(--size), transparent var(--size), transparent 0);
    transition: --size .3s linear;
    
    &:hover {
        --size: 450px;
    }
}

我們通過控制徑向漸變的動畫效果,在 hover 的時候,讓原本只是一個小圓背景,變成一個大圓背景,效果如下:

emmm,效果確實是還原了,問題也很致命:

  • 由于是背景的變化,所以鼠標不需要 hover 到小圓上,只需要進入 div 的范圍,動畫就會開始,這顯然是不對的
  • 和第一種 box-shadow 的方法類似,隱藏在白色之下的導航元素的 DOM 不好放置

上述 Demo 的代碼 -- CodePen Demo -- radial-gradient zoom in animation

emmm,還有一種方法,通過縮放 transform: scale(),也會存一定問題,這里不繼續(xù)展開。

所以到這里,想實現(xiàn)上述的效果,核心在于:

  • 鼠標要 hover 到圓上,才能開始動畫,并且,鼠標可以在展開后的范圍內自由移動,且不會收回動畫效果
  • 動畫展開后,里面的 DOM 的放置,不能太麻煩,能不借助 Javascript 去控制里面內容的顯示隱藏最好

利用 clip-path 實現(xiàn)動態(tài)區(qū)域裁剪

所以,這里,我們其實是需要一個動態(tài)的區(qū)域裁剪。

在我的這篇文章中 -- 如何不使用 overflow: hidden 實現(xiàn) overflow: hidden?,介紹了 CSS 中幾種裁剪元素的方式,而其中,最適合利用在這個效果的,就是 -- clip-path。

利用 clip-path,可以非常好的實現(xiàn),動態(tài)裁剪的功能,并且,代碼也非常簡單:

<div class="g-container"></div>
.g-container {
    position: relative;
    width: 400px;
    height: 300px;
    overflow: hidden;
    transition: clip-path .3s linear;
    clip-path: circle(20px at 44px 44px);
    background: #fff;
    
    &:hover {
        clip-path: circle(460px at 44px 44px);
    }
}

我們只需要利用 clip-path,在最開始的時候,將一個矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一個圓,當 hover 的時候,擴大裁剪圓的半徑到整個矩形范圍即可。

效果如下:

這樣,我們就能完美的實現(xiàn)題圖的效果,并且,內置的 DOM 元素,直接寫進這個 div 內部即可。

<div class="g-container">
    <ul>
        <li>11111</li>
        <li>22222</li>
        <li>33333</li>
        <li>44444</li>
    </ul>
</div>

效果如下:

CodePen Demo -- clip-path zoom in animation

很有意思的一個技巧,利用 clip-path 實現(xiàn)動態(tài)區(qū)域裁剪,希望大家能夠掌握。

到此這篇關于JS利用?clip-path?實現(xiàn)動態(tài)區(qū)域裁剪功能的文章就介紹到這了,更多相關clip-path區(qū)域裁剪內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 微信小程序實現(xiàn)運動步數(shù)排行功能(可刪除)

    微信小程序實現(xiàn)運動步數(shù)排行功能(可刪除)

    這篇文章主要介紹了微信小程序實現(xiàn)運動步數(shù)排行功能(可刪除),實現(xiàn)代碼也很簡單,需要的朋友可以參考下
    2018-07-07
  • JavaScript數(shù)組操作之旋轉二維數(shù)組

    JavaScript數(shù)組操作之旋轉二維數(shù)組

    這篇文章主要介紹了JavaScript數(shù)組操作之旋轉二維數(shù)組,主要從兩個方面展開文章介紹,一是通過對數(shù)組的操作熟練度;二是(鏡像反轉)比實現(xiàn)一更優(yōu),減少了空間復雜度,內容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • js實現(xiàn)圖片無縫循環(huán)輪播

    js實現(xiàn)圖片無縫循環(huán)輪播

    這篇文章主要為大家詳細介紹了js實現(xiàn)圖片無縫循環(huán)輪播,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • layUI布局使用教程

    layUI布局使用教程

    layui屬于輕量級框架,簡單美化.是用于開發(fā)后端模式,它在服務端頁面上有非常好的效果,這篇文章主要介紹了layUI布局使用教程,需要的朋友可以參考下
    2022-09-09
  • JS獲取鼠標坐標的實例方法

    JS獲取鼠標坐標的實例方法

    這篇文章介紹了JS獲取鼠標坐標的實例方法,有需要的朋友可以參考一下
    2013-07-07
  • XMLHTTP 亂碼的解決方法(UTF8,GB2312 編碼 解碼)

    XMLHTTP 亂碼的解決方法(UTF8,GB2312 編碼 解碼)

    XMLHTTP 亂碼的解決方法(UTF8,GB2312 編碼 解碼)(附帶解決DHTMLX不能用中文的問題)
    2011-01-01
  • JavaScript中cookie工具函數(shù)封裝的示例代碼

    JavaScript中cookie工具函數(shù)封裝的示例代碼

    這篇文章給大家主要介紹了JavaScript中cookie工具函數(shù)的封裝,文中給出了詳細的實現(xiàn)步驟和示例代碼,相信會對大家的理解很有幫助,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • javascript實現(xiàn)鼠標移到Image上方時顯示文字效果的方法

    javascript實現(xiàn)鼠標移到Image上方時顯示文字效果的方法

    這篇文章主要介紹了javascript實現(xiàn)鼠標移到Image上方時顯示文字效果的方法,涉及javascript鼠標事件及圖文屬性動態(tài)設置的相關技巧,可用于為圖片增加文字提示效果,需要的朋友可以參考下
    2015-08-08
  • 微信小程序 scroll-view實現(xiàn)錨點滑動的示例

    微信小程序 scroll-view實現(xiàn)錨點滑動的示例

    本篇文章主要介紹了微信小程序 scroll-view實現(xiàn)錨點滑動的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 一行代碼告別document.getElementById

    一行代碼告別document.getElementById

    很久以前做網(wǎng)頁的時候,幾乎沒有聽說過 getElementById 這一玩意兒。在那個ie獨占天下的年代里,做的頁面也幾乎都是ie only的。只要ie沒問題,那就OK了
    2012-06-06

最新評論