Vue<粘性按鈕效果>

2021-01-20 11-20-31.gif

類似效果地址:Vue<自定義鼠標(biāo)指針效果>

知識點:

  1. 背景融合独柑,實現(xiàn)鼠標(biāo)移動到按鍵上合成不同的顏色效果
mix-blend-mode: difference;

2.isolation CSS屬性定義該元素是否必須創(chuàng)建一個新的層疊上下文,一般是配合mix-blend-mode使用

/*如果不單獨使用,背景顏色將被考慮進去*/
isolation: isolate;
  1. 禁止選擇器方法,實現(xiàn)跟隨鼠標(biāo)的標(biāo)簽不會默認被點擊
pointer-events: none;

4.css兄弟選擇器

[cursor='link']:active ~ .cursor

5.3D旋轉(zhuǎn) rotate3d

  /* 
    x:是一個0到1之間的數(shù)值,主要用來描述元素圍繞X軸旋轉(zhuǎn)的矢量值他挎;
    y:是一個0到1之間的數(shù)值皂股,主要用來描述元素圍繞Y軸旋轉(zhuǎn)的矢量值;
    z:是一個0到1之間的數(shù)值凿跳,主要用來描述元素圍繞Z軸旋轉(zhuǎn)的矢量值;
    a:是一個角度值疮方,主要用來指定元素在3D空間旋轉(zhuǎn)的角度控嗜,如果其值為正值,元素順時針旋轉(zhuǎn)骡显,反之元素逆時針旋轉(zhuǎn)
    rotateX(a)函數(shù)功能等同于rotate3d(1,0,0,a)
    rotateY(a)函數(shù)功能等同于rotate3d(0,1,0,a)
    rotateZ(a)函數(shù)功能等同于rotate3d(0,0,1,a)
     */
  transform:rotate3d(0, 0, 0, 0deg)

代碼如下:

<template>
  <div class="overall">
    <div class="container">
      <div class="button one" cursor="link">button1</div>
      <div class="button two" cursor="link">button2</div>
      <div class="button three" cursor="link">button3</div>
      <div class="cursor"></div>
    </div>
  </div>
</template>

<script>
export default {
  mounted() {
    this.init()
  },
  methods: {
    init() {
      this.cursor()
      this.mousemove()
      this.mouseleave()
    },
    //鼠標(biāo)執(zhí)行方法
    cursor() {
      let cursor = document.querySelector('.cursor')
      document.addEventListener('mousemove', function(e) {
        cursor.style.left = e.clientX - 25 + 'px'
        cursor.style.top = e.clientY - 25 + 'px'
      })
    },
    mousemove() {
      let buttons = document.querySelectorAll('.button')
      buttons.forEach(el => {
        el.addEventListener('mousemove', function(e) {
          /* getBoundingClientRect用于獲取某個元素相對于視窗的位置集合疆栏。集合中有top, right, bottom, left等屬性 */
          //   http://www.reibang.com/p/824eb6f9dda4
          const pos = el.getBoundingClientRect()
          const mx = e.clientX - pos.left - pos.width / 2
          const my = e.clientY - pos.top - pos.height / 2

          el.style.transform =
            'translate(' + mx * 0.15 + 'px, ' + my * 0.3 + 'px)'
          el.style.transform +=
            'rotate3d(' + mx * -0.1 + ', ' + my * -0.3 + ', 0, 12deg)'
        })
      })
    },
    mouseleave() {
      let buttons = document.querySelectorAll('.button')
      buttons.forEach(el => {
        el.addEventListener('mouseleave', function(e) {
          el.style.transform = 'translate3d(0px, 0px, 0px)'
          el.style.transform = 'rotate3d(0, 0, 0, 0deg)'
        })
      })
    }
  }
}
</script>
<style >
</style>
<style lang="scss" scoped>
$cursorSize: 50px;
.overall {
  background: #dbfbff;
}
/* 鼠標(biāo)樣式 */
.cursor {
  pointer-events: none; //禁止選擇器方法
  border-radius: 50%;
  z-index: 999;
  background: none;
  position: fixed;
  left: -$cursorSize;
  top: -$cursorSize;
  width: $cursorSize;
  height: $cursorSize;
  border-radius: 50%;
  border: 2px solid #ccc;
  transition: transform 0.3s ease, background 0.3s ease, border-color 0.3s ease;
}
/* 鼠標(biāo)放在按鈕上 仿鼠標(biāo)標(biāo)簽的樣式變化 */
[cursor='link']:hover ~ .cursor {
  mix-blend-mode: difference;
  transform: scale(1.5);
  background: #fff;
  border-color: #fff;
}
/* 鼠標(biāo)點擊按鈕  仿鼠標(biāo)標(biāo)簽的樣式變化 */
[cursor='link']:active ~ .cursor {
  transform: scale(0.8);
}
.container {
  /* https://developer.mozilla.org/zh-CN/docs/Web/CSS/isolation */
  isolation: isolate; /*如果不單獨使用,背景顏色將被考慮進去*/
  display: flex;
  position: absolute;
  width: 100%;
  height: 100%;
  align-items: center;
  justify-content: center;
}
.button {
  border-radius: 2px;
  box-shadow: 0 10px 30px rgba(65, 72, 86, 0.1);
  cursor: none;
  display: inline-block;
  padding: 10px 20px;
  color: white;
  font-size: 20px;
  font-weight: 200;
  margin: 0 20px;
  outline: none;
  user-select: none;
  transition: transform 0.1s linear, color 0.1s linear, background 0.15s linear;
}
.button.one {
  background: #4f29f0;
}
.button.two {
  border: 1px solid #5a5a5a;
  color: #5a5a5a;
  background: none;
}
.button.three {
  background: #12d0e9;
}
</style>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惫谤,一起剝皮案震驚了整個濱河市壁顶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溜歪,老刑警劉巖若专,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蝴猪,居然都是意外死亡调衰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門自阱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚎莉,“玉大人,你說我怎么就攤上這事沛豌÷艽” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阁簸。 經(jīng)常有香客問我爬早,道長,這世上最難降的妖魔是什么启妹? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任筛严,我火速辦了婚禮,結(jié)果婚禮上饶米,老公的妹妹穿的比我還像新娘桨啃。我一直安慰自己,他們只是感情好檬输,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布照瘾。 她就那樣靜靜地躺著,像睡著了一般丧慈。 火紅的嫁衣襯著肌膚如雪析命。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天逃默,我揣著相機與錄音鹃愤,去河邊找鬼。 笑死完域,一個胖子當(dāng)著我的面吹牛软吐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吟税,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼凹耙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肠仪?” 一聲冷哼從身側(cè)響起使兔,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藤韵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熊经,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡泽艘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镐依。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匹涮。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖槐壳,靈堂內(nèi)的尸體忽然破棺而出然低,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布雳攘,位于F島的核電站带兜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吨灭。R本人自食惡果不足惜刚照,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喧兄。 院中可真熱鬧无畔,春花似錦、人聲如沸吠冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拯辙。三九已至郭变,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薄风,已是汗流浹背饵较。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遭赂,地道東北人循诉。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像撇他,于是被迫代替她去往敵國和親茄猫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ## 你可能會用到的css屬性 > css語言相對簡單困肩,css的屬性值就這么多划纽,沒有太多邏輯性,沒有算法锌畸,熟記各個...
    流年_7fec閱讀 240評論 0 0
  • @[toc] border-radiu ??作用是為 div 元素添加圓角邊框;border-radius屬性其實...
    泡泡大師兄閱讀 279評論 0 0
  • 引用CSS方式 內(nèi)部引用 html文件中寫一個 標(biāo)簽勇劣,并將樣式寫入到里面,舉例: 外部引用 通過 標(biāo)簽實現(xiàn)潭枣,里面有...
    dawsonenjoy閱讀 450評論 0 0
  • 第一部分:變形介紹 自層疊樣式表誕生以來比默,元素始終是矩形的,而且只能沿著橫軸和縱軸放置盆犁。有些技巧能讓元素看起來是傾...
    俠客有情劍無情QAQ閱讀 1,493評論 0 17
  • _________________________________________________________...
    fastwe閱讀 448評論 0 0