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

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

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

背景

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

CodePen Demo -- Material Design Menu By Bennett Feely

這個(gè)效果還是有一些值得探討學(xué)習(xí)的點(diǎn),下面我們一起來看看。

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

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

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

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

快速的一個(gè)一個(gè)過一下。

使用 box-shadow 實(shí)現(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;
    }
}

核心就在于:

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

效果如下:

整體的動(dòng)畫是模擬出來了,但是它最致命的問題有兩個(gè):

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

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

使用漸變 radial-gradient 實(shí)現(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;
    }
}

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

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

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

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

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

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

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

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

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

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

利用 clip-path,可以非常好的實(shí)現(xiàn),動(dòng)態(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,在最開始的時(shí)候,將一個(gè)矩形 div,利用 clip-path: circle(20px at 44px 44px) 裁剪成一個(gè)圓,當(dāng) hover 的時(shí)候,擴(kuò)大裁剪圓的半徑到整個(gè)矩形范圍即可。

效果如下:

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

<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

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

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

相關(guān)文章

  • 重學(xué)JS之顯示強(qiáng)制類型轉(zhuǎn)換詳解

    重學(xué)JS之顯示強(qiáng)制類型轉(zhuǎn)換詳解

    這篇文章主要給大家介紹了關(guān)于重學(xué)JS之顯示強(qiáng)制類型轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 淺談javascript事件環(huán)微任務(wù)和宏任務(wù)隊(duì)列原理

    淺談javascript事件環(huán)微任務(wù)和宏任務(wù)隊(duì)列原理

    這篇文章主要介紹了javascript事件環(huán) 微任務(wù)和宏任務(wù)隊(duì)列原理,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-09-09
  • requirejs按需加載angularjs文件實(shí)例

    requirejs按需加載angularjs文件實(shí)例

    本篇文章主要介紹了requirejs按需加載angularjs文件實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 淺談js數(shù)據(jù)類型判斷與數(shù)組判斷

    淺談js數(shù)據(jù)類型判斷與數(shù)組判斷

    下面小編就為大家?guī)硪黄獪\談js數(shù)據(jù)類型判斷與數(shù)組判斷。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • js實(shí)現(xiàn)for循環(huán)跳過undefined值示例

    js實(shí)現(xiàn)for循環(huán)跳過undefined值示例

    這篇文章主要介紹了js實(shí)現(xiàn)for循環(huán)跳過undefined值,結(jié)合實(shí)例形式分析了js使用for循環(huán)針對數(shù)組的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Ionic2調(diào)用本地SQlite實(shí)例

    Ionic2調(diào)用本地SQlite實(shí)例

    這篇文章主要介紹了Ionic2調(diào)用本地SQlite實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 用JS判別瀏覽器種類以及IE版本的幾種方法小結(jié)

    用JS判別瀏覽器種類以及IE版本的幾種方法小結(jié)

    用JS判別瀏覽器種類以及IE版本的幾種方法小結(jié),需要的朋友可以參考下。
    2011-08-08
  • Bootstrap源碼解讀媒體對象、列表組和面板(10)

    Bootstrap源碼解讀媒體對象、列表組和面板(10)

    這篇文章主要源碼解讀了Bootstrap媒體對象、列表組和面板,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript創(chuàng)建對象的七種方式(推薦)

    JavaScript創(chuàng)建對象的七種方式(推薦)

    JavaScript創(chuàng)建對象的方式有很多,通過Object構(gòu)造函數(shù)或?qū)ο笞置媪康姆绞揭部梢詣?chuàng)建單個(gè)對象,顯然這兩種方式會(huì)產(chǎn)生大量的重復(fù)代碼,并不適合量產(chǎn)。接下來介紹七種非常經(jīng)典的創(chuàng)建對象的方式,他們也各有優(yōu)缺點(diǎn)
    2017-06-06
  • 使用electron制作滿屏心特效的示例代碼

    使用electron制作滿屏心特效的示例代碼

    這篇文章主要介紹了使用electron制作滿屏心特效的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論

桓台县| 易门县| 灵石县| 昌图县| 微山县| 和龙市| 太原市| 夏津县| 化德县| 桐梓县| 乌恰县| 辽阳市| 丹江口市| 镇江市| 乳山市| 苏尼特右旗| 巴南区| 洪泽县| 尚志市| 万安县| 双城市| 临漳县| 隆德县| 凤山市| 延边| 托里县| 东城区| 香港| 永善县| 井研县| 鄱阳县| 元朗区| 夹江县| 吉安市| 河西区| 青神县| 乳山市| 宕昌县| 称多县| 鄂伦春自治旗| 固原市|