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

使用CSS寫一個(gè)帶追蹤特效的漸變按鈕

  發(fā)布時(shí)間:2023-10-30 12:01:31   作者:_island   我要評(píng)論
這篇文章給大家介紹了如何使用使用CSS寫一個(gè)帶追蹤特效的漸變按鈕,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來看看吧

寫一個(gè)帶追蹤特效的漸變按鈕

開頭先觀看這張GIF圖:

是否被它的出色動(dòng)畫效果所吸引?

這是從一個(gè)完美競(jìng)技平臺(tái)中錄制出來的

我腦海中萌生了用CSS來模仿這一效果的念頭

繪畫元素

我們先記錄下這個(gè)按鈕浮動(dòng)的顏色(#868BFF),還有按鈕的背景的漸變色(#39D5FF->#868bff

外部使用一個(gè)div元素表示一個(gè)自定義按鈕元素,內(nèi)部包含一個(gè)div元素(follow),用于實(shí)現(xiàn)一個(gè)尾隨鼠標(biāo)的效果。

當(dāng)鼠標(biāo)移動(dòng)到按鈕上時(shí),follow元素將跟隨鼠標(biāo)的位置,創(chuàng)造出一個(gè)視覺上的尾隨效果,以增強(qiáng)用戶界面的交互性

<div class="custom-button">
  <div class="follow"></div>
  按鈕
</div>

接下來,結(jié)合我們之前記錄下來的色值,給按鈕添加上漸變色和浮動(dòng)的元素

.custom-button {
  height: 80px;
  width: 400px;
  background: linear-gradient(to right, #39D5FF, #868bff);
  color: #fff;
  border: none;
  border-radius: 5px;
  cursor: pointer;
  overflow: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
}
.follow {
  width: 180px;
  height: 180px;
  background: radial-gradient(circle, #868bff 0%, transparent 70%, transparent 100%);
  transform-origin: center;
  position: absolute;
  left: 0;
  top: 0;
}

設(shè)置完畢后,你將會(huì)得到以下這個(gè)效果圖

綁定事件

在我們錄制的GIF圖中,我們可以看到當(dāng)我們鼠標(biāo)移動(dòng)到按鈕上面的時(shí)候,會(huì)出現(xiàn)一個(gè)動(dòng)畫效果的軟化邊緣圓形,以增強(qiáng)元素的視覺吸引力

你是不是也和我一樣第一時(shí)間想到了利用mousemove事件來監(jiān)聽鼠標(biāo)移動(dòng)

我們給外部的div綁定上mousemove事件

<div class="custom-button" @mousemove="move">
  <span class="follow"></span>
  按鈕
</div>
const move=()=>{}

通過mouseEvent事件,我們可以拿到很多關(guān)于鼠標(biāo)的各種信息,例如鼠標(biāo)的位置,按鈕狀態(tài),事件類型...

如果您對(duì)mouseEvent事件不是很熟悉,可以看看這里 MouseEvent

接下來,我們通過mouseEvent事件拿到offsetXoffsetY屬性

這兩個(gè)屬性表示的是鼠標(biāo)相對(duì)于目標(biāo)元素內(nèi)部左上角的偏移量

const move = (e: MouseEvent) => {
  const { offsetX, offsetY } = e
  loc.X = offsetX - 90;
  loc.Y = offsetY - 90;
}

現(xiàn)在當(dāng)我們鼠標(biāo)進(jìn)入到按鈕內(nèi)移動(dòng)時(shí),控制臺(tái)就會(huì)持續(xù)打印出當(dāng)前鼠標(biāo)基于元素的坐標(biāo)位置

我們新建一個(gè)reactive屬性,用來存放當(dāng)前鼠標(biāo)坐標(biāo)系,方便后續(xù)將值綁定到元素中

這里要注意的是,我們的鼠標(biāo)指針是在圓形元素的中間,所以我們要將offsetX,offsetY各自減去90px,也就是width/2height/2

// 存放坐標(biāo)信息
const loc = reactive({
  X: 0,
  Y: 0
})
// 鼠標(biāo)事件
const move = (e: MouseEvent) => {
  const { offsetX, offsetY } = e
  loc.X = offsetX - 90;
  loc.Y = offsetY - 90;
}

loc對(duì)象綁定給follow元素作為樣式

<span class="follow" ref="followRef" :style="{ transform: `translate(${loc.X}px, ${loc.Y}px)` }"></span>

小小知識(shí)點(diǎn):使用transform進(jìn)行移動(dòng)可以優(yōu)化性能,因?yàn)樗粫?huì)觸發(fā)頁(yè)面的reflowreflow是比較消耗性能的操作

我們?cè)囈幌滦Ч?,跟著鼠?biāo)移動(dòng)的效果貌似是實(shí)現(xiàn)了,但是你有沒有發(fā)現(xiàn)每次移動(dòng)的時(shí)候follow元素總會(huì)閃到坐上角去,而且offsetXoffsetY輸出了{offsetX: 171, offsetY: 63}

我們給follow元素添加上pointer-events: none;即可解決問題

在多個(gè)元素重疊在一起時(shí),event.target會(huì)發(fā)生變動(dòng),可以打印一下看看

事件目標(biāo)元素一直在spandiv標(biāo)簽中來回切換,導(dǎo)致我們出現(xiàn)抖動(dòng)的效果

來看看調(diào)整過的效果!

實(shí)現(xiàn)動(dòng)畫效果

這里可以使用CSS中的過渡動(dòng)畫來實(shí)現(xiàn)我們的需求,這里使用scale函數(shù)用來改變follow元素的縮放效果,當(dāng)鼠標(biāo)進(jìn)入到元素中,scale值會(huì)從01,反之,重置為0

我們給外部的div綁定多兩個(gè)事件,分別是mouseentermouseleave,用來記錄當(dāng)前鼠標(biāo)是否進(jìn)入到元素中

定義兩個(gè)ref屬性,用來記錄transitionDuration值(元素CSS屬性的過渡時(shí)間)和isShowCircle是否顯示follow元素

<!-- 綁定鼠標(biāo)事件和CSS屬性值 -->
<div class="custom-button" @mousemove="move" @mouseenter="enter" @mouseleave="leave">
  <span class="follow" ref="followRef"
    :style="{ transform: `translate(${loc.X}px, ${loc.Y}px) scale(${isShowCircle ? 1 : 0})`, transitionDuration: tds }"></span>
  按鈕
</div>
// 是否顯示圓形
const isShowCircle = ref(false)
// 過渡時(shí)間
const tds = ref('0.2s')
// 當(dāng)鼠標(biāo)進(jìn)入到元素后觸發(fā)
const enter = () => {
  isShowCircle.value = true
  // 這里要注意下
  // 需要延遲設(shè)置tds值,否則會(huì)出現(xiàn)進(jìn)入時(shí)動(dòng)畫丟失效果
  setTimeout(() => {
    tds.value = '0s';
  }, 200);
}
// 當(dāng)鼠標(biāo)離開元素后觸發(fā)
const leave = () => {
  isShowCircle.value = false
  tds.value = '0.2s';
}

現(xiàn)在就可以來看看我們效果怎么樣

解決文字層級(jí)問題

現(xiàn)在我們的特效會(huì)將按鈕中的文字覆蓋掉,是因?yàn)楫?dāng)兄弟元素脫離了文檔流之后,元素的層級(jí)可能會(huì)比兄弟元素略高一些,我們只需要在按鈕里的文字用span標(biāo)簽包裹著,并給他指定一個(gè)適當(dāng)?shù)?code>z-index即可解決這個(gè)問題

別忘記了,也要設(shè)置pointer-events: none;哦,否則會(huì)出現(xiàn)抖動(dòng)問題

.text {
    z-index: 1;
    pointer-events: none;
}

擴(kuò)展

Vue項(xiàng)目開發(fā)中,我們可能會(huì)遇到一份代碼重復(fù)使用的情況,這個(gè)時(shí)候我們可以使用Vue組件的方式來封裝這個(gè)按鈕

這里我就直接把代碼貼在這里啦,有需要的同學(xué)可以從這里Copy~~ 

<template>
    <div class="custom-button" @mousemove="move" @mouseenter="enter" @mouseleave="leave">
        <span class="follow" ref="followRef"
            :style="{ transform: `translate(${loc.X}px, ${loc.Y}px) scale(${isShowCircle ? 1 : 0})`, transitionDuration: tds }"></span>
        <span class="text">
            <slot></slot>
        </span>
    </div>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue';
const isShowCircle = ref(false)
const followRef = ref()
const loc = reactive({
    X: 0,
    Y: 0
})
const tds = ref('0.2s')
const enter = () => {
    isShowCircle.value = true
    setTimeout(() => {
        tds.value = '0s';
    }, 200);
}
const leave = () => {
    isShowCircle.value = false
    tds.value = '0.2s';
}
const move = (e: MouseEvent) => {
    const { offsetX, offsetY } = e
    loc.X = offsetX - 90;
    loc.Y = offsetY - 90;
}
</script>
<style scoped>
.custom-button {
    height: 80px;
    width: 400px;
    background: linear-gradient(to right, #39D5FF, #868bff);
    color: #fff;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    overflow: hidden;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
}
.follow {
    width: 180px;
    height: 180px;
    background: radial-gradient(circle, #868bff 0%, transparent 70%, transparent 100%);
    transform-origin: center;
    pointer-events: none;
    position: absolute;
    left: 0;
    top: 0;
}
.text {
    z-index: 1;
    pointer-events: none;
}
</style>

以上就是使用CSS寫一個(gè)帶追蹤特效的漸變按鈕的詳細(xì)內(nèi)容,更多關(guān)于CSS追蹤特效的漸變按鈕的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用CSS實(shí)現(xiàn)文字漸變色效果

    要在文本中實(shí)現(xiàn)漸變色效果,我們可以使用CSS中的background-clip屬性和CSS漸變來實(shí)現(xiàn),本文給大家分享一個(gè)代碼示例,展示如何創(chuàng)建文本漸變色效果,感興趣的同學(xué)可以自己動(dòng)手
    2023-10-16
  • 使用CSS實(shí)現(xiàn)漸變圓角邊框的效果

    這篇文章給大家介紹了如何使用CSS實(shí)現(xiàn)漸變圓角邊框的效果,有沒有發(fā)現(xiàn)在現(xiàn)如今的網(wǎng)站應(yīng)用中,我們大量的使用到這類場(chǎng)景,在解決這類問題時(shí),我們利用了css的mask與mask-comp
    2023-10-12
  • CSS動(dòng)態(tài)流光線條效果和顏色漸變效果的實(shí)現(xiàn)代碼

    在前端開發(fā)中,為網(wǎng)頁(yè)添加動(dòng)態(tài)效果可以提升用戶體驗(yàn),本文將介紹如何使用 CSS 實(shí)現(xiàn)動(dòng)態(tài)流光線條效果和顏色漸變效果,為你的網(wǎng)頁(yè)增添炫目的視覺效果,感興趣的同學(xué)可以自己動(dòng)
    2023-09-12
  • 純CSS實(shí)現(xiàn)具有漸變和圓角的彩色邊框

    傳統(tǒng)的灰色純色邊框你是不是覺得太難看了?你是否想設(shè)計(jì)一些精美的邊框,例如漸變、圓角、彩色的邊框?那你來對(duì)地方了,本文將介紹如何用純CSS就能實(shí)現(xiàn)具有漸變和圓角的彩
    2023-02-25
  • CSS實(shí)現(xiàn)漸變色邊框(Gradient borders)的5種方法

    給 border 設(shè)置漸變色是很常見的效果,實(shí)現(xiàn)這個(gè)效果有很多思路,本文主要介紹了CSS實(shí)現(xiàn)漸變色邊框的5種方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感
    2022-03-22
  • CSS巧用漸變實(shí)現(xiàn)高級(jí)感背景光動(dòng)畫

    本文主要介紹了利用CSS中的conic-gradient()以及box-shadow模擬出光源陰影效果,從而實(shí)現(xiàn)一個(gè)充滿高級(jí)感的背景光動(dòng)畫,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-11-30
  • CSS實(shí)現(xiàn)切角+邊框+投影+內(nèi)容背景色漸變效果

    這篇文章主要介紹了CSS實(shí)現(xiàn)切角+邊框+投影+內(nèi)容背景色漸變效果,單純用css實(shí)現(xiàn)切角+邊框+投影+內(nèi)容背景色漸變所有效果,因?yàn)閁I沒給背景切圖,尋思這個(gè)理論上用css就能實(shí)現(xiàn)
    2021-10-27
  • CSS 還能這樣玩?奇思妙想漸變的藝術(shù)

    這篇文章主要介紹了CSS 還能這樣玩?奇思妙想漸變的藝術(shù),包括數(shù)量級(jí)對(duì)背景圖形的影響及借助 CSS @property 觀察變化過程,需要的朋友可以參考下
    2021-04-26
  • CSS線性漸變的凹面矩形過渡動(dòng)效的實(shí)現(xiàn)

    這篇文章主要介紹了CSS線性漸變的凹面矩形過渡動(dòng)效的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一
    2020-11-09
  • css 實(shí)現(xiàn)圓形漸變進(jìn)度條效果的示例代碼

    這篇文章主要介紹了css 實(shí)現(xiàn)圓形漸變進(jìn)度條效果的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-24

最新評(píng)論