dev

Ripple, çoğu düğmeye dalgalanma efekti ekleyen ve kullanıcıların herhangi bir ögeye dalga eklemesine izin veren bir betiktir. Polymer Project'in paper-ripple bileşeninden orijinal koddur.

Installation

Hakkında

Material Design tarafından açıklandığı gibi dalgalanmalar, kullanıcılara bir ögeye dokunulduğuna dair net bir sinyal sağlayan dokunma olayları için görsel bir geri bildirim biçimidir.

Üç tür dalgalanma hareketi vardır:

Ripple'ın süresi, rengi, süresi, bozulma süresi ve boyutu, ihtiyaçlarınıza ve marka/stil seçimlerinize uyacak şekilde özelleştirebileceğiniz özelliklerden bazılarıdır.

Usage

Çalışması için betiğini içe aktarmanın dışında bir şey yapmanız gerekmez. Ancak betiği, dalgalanma etkisine sahip olabilmek için daha fazla öge eklemek üzere yapılandırabilir ve dalgalanmanın kendisinin belirli ögeler üzerinde nasıl davranacağını da değiştirebilirsiniz.

Öge ekleme

Aşağıdaki özelliklerin herhangi bir kombinasyonuyla window.ripplesConfig adlı bir nesne oluşturarak daha fazla öğenin dalgalanma etkisine sahip olmasını sağlayabilirsiniz: normalRipples, recenteredRipples ve/veya sınırsız Dalgalar. Bu özelliklerden herhangi birinin değeri bir NodeList olmalıdır (document.querySelectorAll() yöntemi tarafından verilen ögelerin listesi).

Her özellik, eşleşen ögelere dalgalanmalar verir, ancak davranışları, hangi kategori olarak ayarlandıklarına bağlı olacaktır (her kategorinin nasıl davrandığını öğrenmek için hakkında bölümüne bakın).

Çok uzun; okuyamadım: Üç dalgalanma kategorisinin tümünü kullanan bir yapılandırma betik örneği şuna benzer:

window.ripplesConfig = {
  'normalRipples': document.querySelectorAll('.elements-1, .elements-2'),
  'recenteredRipples': document.querySelectorAll('.foo .bar'),
  'unboundedRipples': document.querySelectorAll('.lorem .ipsum')
};

Bu temelde şu anlama gelir:

Başka bir yol da, herhangi bir JavaScript'i düzenlemeden dokunmada dalgalanma efekti vermek için herhangi bir öğeye aşağıdaki veri özniteliklerinden herhangi birini eklemektir:

Her bir duruma örnek olarak şunlar verilebilir:

Kod Sonuç
<div class="wds-button has-ripple">Touch me!</div>
Touch me!
<div class="wds-button recentered-ripple">Yeniden merkezlendim!</div>
Yeniden merkezlendim!
<div class="wds-button unbounded-ripple">Ve ben sınırsızım!</div>
Ve ben sınırsızım!

Yapabileceğiniz başka bir şey de, kullanıcı böyle bir etkiyi tetikleyemeyecek gibi görünen dalgalı bir yüzeyin üzerinde gezinirken hafif bir efekt eklemektir. Bu, göreceli olarak konumlandırılmış bir ögede ::before veya ::after gibi sözde sınıflar kullanılarak yapılabilir:

Kod Sonuç

<div class="card has-ripple">Üzerime gel ve bana dokun!</div>

.card {
  align-items: center;
  background-color: var(--theme-page-background-color--secondary);
  border-radius: 8px;
  display: flex;
  height: 14em;
  justify-content: center;
  margin: 1em;
  overflow: hidden;
  padding: 24px;
  position: relative;
  text-align: center;
  width: 10em;
}

.card:hover {
  cursor: pointer;
}

.card::before {
  background-color: currentColor;
  content: '';
  height: 100%;
  left: 0;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  top: 0;
  transition: opacity 15ms linear, background-color 15ms linear;
  width: 100%;
  z-index: 1;
}

.card:hover::before {
  opacity: .04;
}

.card:active::before,
.card:focus-within::before {
  opacity: .12;
  transition-duration: 75ms;
}

Üzerime gel ve bana dokun!

Davranışı değiştirme

CSS özel özelliklerini (değişkenleri) kullanarak dalgalanmaların bazı özelliklerini öge başına veya öğe gruplarına göre değiştirebilirsiniz. Her değişkenin ne yaptığını öğrenmek için API bölümüne gidin.

Çok uzun; okuyamadım: Mevcut tüm değişkenleri kullanan bir yapılandırma stil sayfası örneği şuna benzer:

.nice-button {
  --ripple-config__duration--ms: 1000;
  --ripple-config__end-duration--ms: 500;
  --ripple-config__max-radius--px: 200;
  --ripple-config__min-duration--ms: 600;
  --ripple-config__timing-function: ease;
}

Bunun anlamı:

Ek olarak, bazı görsel özelliklerini de değiştirebilirsiniz:

.nice-button {
  --ripple-color: lime;
  --ripple-border-radius: 0;
  --ripple-opacity: 0.5;
}

Bu da şu anlama gelir:

Examples

Düğme İkincil Metin Active Tam genişlik


Example

A new morning Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in nisl sed quam convallis laoreet a mollis arcu. Sed molestie consequat libero vitae dictum.

İkincil Birincil

Example

A new morning Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque in nisl sed quam convallis laoreet a mollis arcu. Sed molestie consequat libero vitae dictum.

İkincil Birincil


Sınırsız dalgalanma This card's CSS:
#var-card-1 {
  --ripple-config__duration--ms: 6000;
  --ripple-config__max-radius--px: 300;
  --ripple-color: #3ea6ff;
}
Ortalanmış dalgalanma. This card's CSS:
#var-card-2 {
  --ripple-config__duration--ms: 600;
  --ripple-config__max-radius--px: 150;
  --ripple-config__min-duration--ms: 500;
  --ripple-color: #e91e63;
  --ripple-border-radius: 30%;
  --ripple-opacity: 40%;
}
Normal dalgalanma. This card's CSS:
#var-card-3 {
  --ripple-config__end-duration--ms: 6000;
  --ripple-config__max-radius--px: 1000;
  --ripple-config__timing-function: ease;
  --ripple-color: #64dd17;
  --ripple-border-radius: 0;
  --ripple-opacity: 0.3;
}
Normal dalgalanma. This card's CSS:
#var-card-4 {
  --ripple-config__duration--ms: 1500;
  --ripple-config__end-duration--ms: 1600;
  --ripple-config__max-radius--px: 50;
  --ripple-config__min-duration--ms: 1000;
  --ripple-config__timing-function: ease-out;
  --ripple-color: #d500f9;
  --ripple-border-radius: 50%;
  --ripple-opacity: .35;
}
Materyal Tasarımı Dalgalanması
Kod Sonuç

<div class="mdc-ripple has-ripple" id="mdc-card-1">Normal speed</div>
<div class="mdc-ripple has-ripple" id="mdc-card-2">1000% Slower</div>

/* (Cards' CSS not included). */
.mdc-ripple::before {
  background-color: currentColor;
  content: '';
  height: 200%;
  left: -50%;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  top: -50%;
  transition: opacity 75ms linear;
  width: 200%;
  z-index: 1;
}

.mdc-ripple:hover::before {
  opacity: .04;
}

.mdc-ripple:is(:focus, :focus-within, :active)::before {
  opacity: .12;
}

/* Normal speed. */
.mdc-ripple {
  --ripple-config__duration--ms: 225;
  --ripple-config__end-delay--ms: 3000;
  --ripple-config__end-duration--ms: 150;
  --ripple-config__max-radius--px: 2000;
  --ripple-config__min-duration--ms: 75;
  --ripple-config__timing-function: cubic-bezier(.4, 0, .2, 1);
  --ripple-opacity: .12;
}

/* x10 (1000%) slower. */
#mdc-card-2.mdc-ripple {
  --ripple-config__duration--ms: 2250;
  --ripple-config__end-duration--ms: 1500;
  --ripple-config__min-duration--ms: 750;
}

Normal speed
1000% Slower

API

HTML ögeleri

Bu betiğinin çalışması için herhangi bir HTML yazmanız gerekmediğini unutmayın, ancak oluşturulan her öğenin amacını bilmek isteyebilirsiniz.

HTML ögesi Description
<div class="ripple-container"></div>
Zorunlu. Dalgalanmanın konumunu sarar ve sınırlar.
<div class="ripple"></div>
Zorunlu. Dalgalanmanın kendisidir.

CSS seçicileri

CSS seçicisi Description
[ripple]
[data-ripple]
ripple özniteliğine sahip herhangi bir öğeyi seçer. Bu ögeler, betiğinin yürütülmesi üzerine bir dalgalanmaya sahip olacaktır.
[recentered]
[data-recentered]
recentered özniteliğine sahip herhangi bir öğeyi seçer. Bu ögeler, betiğinin yürütülmesi üzerine ortalanmış bir dalgalanmaya sahip olacaktır.
[unbounded]
[data-unbounded]
unbounded özniteliğine sahip herhangi bir ögeyi seçer. Bu ögeler, betik çalıştırıldığında sınırsız bir dalgalanmaya sahip olacaktır.

CSS değişkenleri

CSS değişkeni Description
--ripple-config__duration--ms Dalgalanma genişletme animasyonunun süresi (milisaniye olarak). Varsayılan olarak en az 800ms şeklindedir.
--ripple-config__end-duration--ms Dalgalanma yavaşlama animasyonunun süresi (milisaniye olarak). Varsayılan olarak 150 ms (dokunulduğunda) veya 400ms (tuşa basıldığında) şeklindedir.
--ripple-config__max-radius--px Dalgalanmanın maksimum yarıçapı (piksel olarak). Varsayılan olarak 300px şeklindedir.
--ripple-config__min-duration--ms Üçlü genişletme animasyonunun minimum süresi (milisaniye olarak). Varsayılan olarak 800 ms şeklindedir.
--ripple-config__timing-function Genişletme animasyonunun hız oranını belirleyen CSS easing işlevi. Varsayılan olarak cubic-bezier(.2, .9, .1, .9) şeklindedir.
--ripple-color Dalgalanmanın rengini belirler. Varsayılan olarak currentText (ögenin geçerli metni color değeridir).
--ripple-border-radius Dalgalanmanın border-radius değerini belirler. Varsayılan olarak 50% (tam daire) şeklindedir.
--ripple-opacity Dalgalanmanın opacity değerini belirler. Varsayılanlar 25% değeridir.
--ripple-checked-color Onay kutuları, radyo düğmeleri ve anahtarlar gibi işaretli ögelerde dalganın rengini belirler. Varsayılan olarak var(--theme-link-color) şeklindedir.
--ripple-unchecked-color Onay kutuları, radyo düğmeleri ve anahtarlar gibi işaretlenmemiş ögelerde dalganın rengini belirler. Varsayılan olarak var(--theme-body-text-color) şeklindedir.
--ripple-checked-opacity Onay kutuları, radyo düğmeleri ve anahtarlar gibi işaretli ögelerde dalgalanmanın opaklığını belirler. Varsayılanlar 20% değeridir.
--ripple-unchecked-opacity Onay kutuları, radyo düğmeleri ve anahtarlar gibi işaretlenmemiş ögelerde dalgalanmanın opaklığını belirler. Varsayılanlar 15% değeridir.