技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

CSS實(shí)現(xiàn)的拖拽式確認(rèn)按鈕【演示/源碼下載】

作者:admin    時(shí)間:2023-2-28 17:15:41    瀏覽:

確認(rèn)按鈕通常是通過(guò)點(diǎn)擊按鈕的動(dòng)作來(lái)觸發(fā),本文要介紹的是如何通過(guò)拖拽按鈕的方式來(lái)觸發(fā)確定的動(dòng)作。

 

demodownload

實(shí)例介紹

點(diǎn)擊“購(gòu)買(mǎi)”按鈕,出現(xiàn)一個(gè)拖拽式的確認(rèn)按鈕,把按鈕拖到合適的位置,完成“確認(rèn)”動(dòng)作。

HTML代碼

<button class="button">
    <span class="handle">
        <svg class="background" viewBox="0 0 40 40">
            <path d="M5 16C5 9.92487 9.92487 5 16 5H24C30.0751 5 35 9.92487 35 16C35 16 35 18.4379 35 20C35 21.5621 35 24 35 24C35 30.0751 30.0751 35 24 35H16C9.92487 35 5 30.0751 5 24C5 24 5 21.5621 5 20C5 18.4379 5 16 5 16Z"></path>
        </svg>
        <svg class="icon" viewBox="0 0 20 20">
            <polyline points="9 13 12 10 8 6"></polyline>
        </svg>
    </span>
    <span class="default">購(gòu)    買(mǎi)</span>
    <span class="progress">確 認(rèn)</span>
    <span class="success">完 成</span>
    <span class="drop">
        <svg class="background" viewBox="0 0 40 40">
            <path d="M5 16C5 9.92487 9.92487 5 16 5H24C30.0751 5 35 9.92487 35 16C35 16 35 18.4379 35 20C35 21.5621 35 24 35 24C35 30.0751 30.0751 35 24 35H16C9.92487 35 5 30.0751 5 24C5 24 5 21.5621 5 20C5 18.4379 5 16 5 16Z"></path>
        </svg>
    </span>
</button>

我們看到有三段svg代碼,前兩段svg代碼的容器是class="handle"span標(biāo)簽,后一段svg代碼的容器是class="drop"span標(biāo)簽。它們的作用是畫(huà)出一個(gè)可拖動(dòng)的按鈕,和一個(gè)固定的按鈕模型。

 

此外,HTML代碼里還有三個(gè)span標(biāo)簽,class的值為:default、progresssuccess,它們均為當(dāng)前狀態(tài)提示。

CSS代碼

CSS代碼較為復(fù)雜,使用了大量的代碼來(lái)完成svg按鈕的樣式設(shè)計(jì)。

.button {
  --text: #FFFFFF;
  --background: #275EFE;
  --background-opacity: 1;
  --handle-stroke: rgba(255, 255, 255, 0.8);
  --handle-fill: rgba(255, 255, 255, 0.08);
  --handle-blur: 2;
  --drop-stroke: rgba(255, 255, 255, 0.2);
  --drop-fill: rgba(255, 255, 255, 0);
  --icon-stroke: #FFFFFF;
  --icon-rotate: 0;
  --icon-scale: 1;
  --icon-y: 0;
  --icon-offset: 16.8;
  --handle-drop-opacity: 0;
  --default-opacity: 1;
  --default-x: 0;
  --default-scale: 1;
  --progress-opacity: 0;
  --progress-scale: .75;
  --success-opacity: 0;
  --success-x: 0;
  --success-scale: .75;
  display: block;
  cursor: pointer;
  position: relative;
  text-align: center;
  outline: none;
  border: none;
  overflow: hidden;
  padding: 8px 0;
  margin: 0;
  width: 148px;
  line-height: 30px;
  font-family: inherit;
  font-weight: 600;
  border-radius: 16px;
  color: var(--text);
  background: var(--background);
  transform: scale(var(--button-scale, 1)) translateZ(0);
  transition: transform 0.15s;
  -webkit-appearance: none;
  -webkit-tap-highlight-color: transparent;
}
.button .handle,
.button .progress,
.button .success,
.button .drop {
  position: absolute;
  left: var(--left, auto);
  right: var(--right, auto);
  top: var(--top, auto);
}
.button .handle {
  -webkit-backdrop-filter: blur(calc(var(--handle-blur) * 1px));
  backdrop-filter: blur(calc(var(--handle-blur) * 1px));
}
.button .handle,
.button .drop {
  --top: 8px;
  z-index: 1;
  border-radius: 11px;
  opacity: var(--handle-drop-opacity);
  pointer-events: var(--handle-drop-pointer, auto);
}
.button .handle svg,
.button .drop svg {
  display: block;
  width: var(--svg-size, 40px);
  height: var(--svg-size, 40px);
  stroke-width: 1px;
  stroke: var(--stroke, var(--handle-stroke));
  fill: var(--fill, var(--handle-fill));
}
.button .handle svg.background,
.button .drop svg.background {
  margin: -5px;
  opacity: var(--background-opacity);
}
.button .handle svg.icon,
.button .drop svg.icon {
  --svg-size: 20px;
  --fill: none;
  --stroke: var(--icon-stroke);
  position: absolute;
  left: 5px;
  top: 5px;
  stroke-width: 1.25;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 8.5;
  stroke-dashoffset: var(--icon-offset);
  transform: translateY(calc(var(--icon-y) * 1px)) rotate(calc(var(--icon-rotate) * 1deg)) scale(var(--icon-scale)) translateZ(0);
}
.button .handle {
  --left: 8px;
}
.button .drop {
  --right: 8px;
  --stroke: var(--drop-stroke);
  --fill: var(--drop-fill);
}
.button .default,
.button .progress,
.button .success {
  display: block;
  font-size: var(--font-size, 14px);
  opacity: var(--opacity, var(--default-opacity));
  transform: translateX(calc(var(--x, var(--default-x)) * 1px)) scale(var(--scale, var(--default-scale))) translateZ(0);
}
.button .progress,
.button .success {
  --left: 0;
  --right: 0;
  --top: 8px;
}
.button .progress {
  --font-size: 11px;
  --opacity: var(--progress-opacity);
  --scale: var(--progress-scale);
}
.button .success {
  --font-size: 14px;
  --opacity: var(--success-opacity);
  --x: var(--success-x);
  --scale: var(--success-scale);
}
.button:not(.active) {
  --handle-drop-pointer: none;
}
.button:not(.active):active {
  --button-scale: .975;
}

JavaScript代碼

本實(shí)例用到三個(gè)第三方JS庫(kù)文件,它們已包含在源碼下載壓縮包里。

<script src='gsap.min.js'></script>
<script src='MorphSVGPlugin3.min.js'></script>
<script src='Draggable3.min.js'></script>

下面代碼是按鈕拖拽后的狀態(tài)變化。

gsap.to(button, {
  '--background-opacity': 0,
  '--progress-opacity': 0,
  '--handle-blur': 0,
  '--icon-y': .5,
  duration: .3,
  delay: .2 }); /* 延遲時(shí)間 按鈕輪廓消失,只剩小箭頭 */

gsap.to(button, {
  '--icon-rotate': 87,
  '--icon-offset': 15.5,
  '--icon-scale': 1.5,
  duration: .25,
  delay: .3 }); /* 延遲時(shí)間 小箭頭轉(zhuǎn)換成勾 */

gsap.to(button, {
  '--success-opacity': 1,
  '--success-scale': 1,
  '--success-x': 8,
  duration: .2,
  delay: .8 }); /* 延遲時(shí)間 顯示“完成” */

 

總結(jié)

本文介紹了拖拽式確認(rèn)的按鈕設(shè)計(jì),它涉及到的知識(shí)面比較廣,要比較了解CSS,SVG,還有JavaScript,此外,要引用三個(gè)第三方JS庫(kù)文件,不過(guò)我認(rèn)為這是一個(gè)很好的確認(rèn)按鈕設(shè)計(jì),喜歡的朋友可以下載源碼直接使用。

相關(guān)文章

標(biāo)簽: button  按鈕  提交按鈕  拖拽按鈕  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */