AMP, güvenilir, duyarlı, performansı yüksek web sayfaları oluşturmayı kolaylaştırır. AMP, JavaScript yazmak zorunda kalmadan yaygın site etkileşimleri oluşturmanıza olanak tanır. amp.dev web sitesinde önceden tasarlanmış hızlı başlangıç şablonları bulunur.
Geliştireceğiniz uygulama
Bu codelab'de, AMP'nin birçok özelliğini ve genişletilmiş bileşenlerini içeren, tamamen duyarlı, etkileşimli ve güzel bir AMP sayfası oluşturacaksınız:
|
Gerekenler
- Modern bir web tarayıcısı
- Node.js ve bir metin düzenleyici veya CodePen ya da benzer bir online oyun alanına erişim
- HTML, CSS, JavaScript ve Google Chrome Geliştirici Araçları ile ilgili temel bilgiler
İçerik yayınlama aracı
AMP sayfamızı yayınlamak için yerel bir HTTP sunucusu çalıştırmak üzere Node.js kullanırız. Nasıl yükleneceğini öğrenmek için Node.js web sitesine bakın.
İçeriği yerel olarak sunmak için kullandığımız araç, Node.js tabanlı bir statik içerik sunucusu olan serve olacaktır. Bu uygulamayı yüklemek için aşağıdaki komutu çalıştırın:
npm install -g serve
amp.dev'den şablon indirin
AMP Şablonları, hızlı ve modern AMP sayfaları oluşturmanıza yardımcı olan hızlı başlangıç AMP şablonlarının ve bileşenlerinin yer aldığı bir depodur.
AMP Şablonları'nı ziyaret edin ve "Yılın En İyi Hayvan Fotoğrafları" şablonu için "Basit Makale" kodunu indirin.
Şablon kodunu çalıştırma
ZIP dosyasının içeriğini ayıklayın.
Dosyaları yerel olarak sunmak için article
klasöründe serve
komutunu çalıştırın.
Tarayıcınızda http://localhost:5000/templates/article.amp.html adresini ziyaret edin. (Bağlantı noktası, serve
sürümüne bağlı olarak 3000 veya farklı bir sayı olabilir. Tam adres için konsolu kontrol edin.)
Biz bu konuyla ilgileniyorken Chrome Geliştirici Araçları'nı açıp Cihaz modunu da açalım.
Şablon kodunu kırpma
Bu aşamada, çoğunlukla işlevsel olan bir AMP sayfasını şifreliyoruz. Ancak bu codelab'in amacı, öğrenmeniz ve alıştırma yapmanızdır.
<body></body>
içindeki her şeyi silin.
Şimdi yalnızca birkaç ortak kod içeren boş bir sayfa kaldı:
Bu codelab boyunca bu boş sayfaya birçok bileşen ekleyerek şablonu daha da fazla işlevle kısmen yeniden oluşturacaksınız.
AMP sayfası, ek etiketlere ve güvenilir performans için bazı kısıtlamalara sahip bir HTML sayfasıdır.
AMP sayfasındaki etiketlerin çoğu normal HTML etiketleri olsa da, bazı HTML etiketleri AMP'ye özgü etiketlerle değiştirilir. AMP HTML bileşenleri adı verilen bu özel öğeler, sık kullanılan kalıpların etkili bir şekilde uygulanmasını kolaylaştırır.
En basit AMP HTML dosyası şu şekilde görünür (bazen AMP ortak paneli olarak da adlandırılır):
<!doctype html>
<html ⚡>
<head>
<meta charset="utf-8">
<link rel="canonical" href="hello-world.html">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<script async src="https://cdn.ampproject.org/v0.js"></script>
</head>
<body>Hello World!</body>
</html>
Kurulum sırasında oluşturduğunuz boş sayfanın koduna göz atın. Bu ortak metin içeren ve birkaç ek (ve önemli ölçüde küçültülmüş CSS içeren) bir <style amp-custom>
etiketi içeren kod bulunur.
AMP, tasarım konusunda bakış açısına sahip değildir ve belirli bir stil grubunu zorunlu kılmaz. Çoğu AMP bileşeni çok temel bir stile sahiptir. Özel CSS'lerini sağlamak için sayfa yazarlarına bırakılır. İşte <style amp-custom>
devreye giriyor.
Ancak AMP Şablonları, hızlı bir şekilde zarif AMP sayfaları oluşturmanıza yardımcı olmak için güzel tasarlanmış, tarayıcılar arası ve duyarlı olan kendi kullanışlı CSS stillerini sunar. İndirdiğiniz şablon kodu, <style amp-custom>.
içerisinde bu düşünülmüş CSS stillerini içeriyor
Şablondan kaldırdığımız bileşenlerden bazılarını ekleyerek bir gezinme menüsü, sayfa başlığı resmi ve başlık gibi sayfamız için bir kabuk oluşturacağız.
AMP Start kullanıcı arayüzü bileşenleri sayfasından yardım alacağız, ancak uygulama ayrıntılarını derinlemesine inceleyeceğiz. Codelab'deki sonraki adımlar birçok fırsat sağlayacaktır.
Duyarlı gezinme ekleme
https://ampstart.com/components#navi adresine gidin ve RESMİ MENUBAR için sağlanan HTML kodunu kopyalayıp sayfanızın body
bölümüne yapıştırın.
AMP Start'ın sağladığı kod, sayfanız için duyarlı gezinme çubuğu uygulamak üzere gerekli HTML ve CSS sınıf yapısını içerir.
Deneyin: Pencerenizin farklı ekran boyutlarına nasıl yanıt verdiğini görmek için yeniden boyutlandırın.
Bu kod, CSS medya sorgularını ve amp-sidebar ile amp-accordion AMP bileşenlerini kullanır.
Lokomotif resim ve başlık ekleme
AMP Start, güzel ve duyarlı kahraman resimleri ile başlıklar için kullanıma hazır snippet'ler de sunar.
https://ampstart.com/components#media adresine gidin ve Fullpage Hero için sağlanan HTML kodunu kopyalayıp <!-- End Navbar --> comment
kodundan sonra body.
etiketinin hemen altına yapıştırın.
Resmi ve başlığı şimdi güncelleyelim.
Fark edebileceğiniz gibi, kod snippet'inde iki farklı amp-img
etiketi vardır. Bunlardan biri daha küçük genişlikler için kullanılır, daha düşük çözünürlüklü bir resme işaret etmelidir. Diğeri ise daha büyük ekranlar içindir. AMP'nin tüm AMP öğelerinde desteklediği media
özelliğine göre otomatik olarak geçiş yapılır.
src
, width
ve height
öğelerini farklı resimlerle güncelleyin ve mevcut <figure>...</figure>
metnini Pasifik Kuzeybatıdaki En Güzel Yürüyüşler olarak değiştirin.
<figure class="ampstart-image-fullpage-hero m0 relative mb4">
<amp-img width="600" height="900" layout="responsive" src="https://unsplash.it/600/900?image=1003" media="(max-width: 415px)"></amp-img>
<amp-img height="1800" layout="fixed-height" src="https://unsplash.it/1200/1800?image=1003" media="(min-width: 416px)"></amp-img>
<figcaption class="absolute top-0 right-0 bottom-0 left-0">
<header class="p3">
<h1 class="ampstart-fullpage-hero-heading mb3">
<span class="ampstart-fullpage-hero-heading-text">
Most Beautiful Hikes in the Pacific Northwest
</span>
</h1>
<span class="ampstart-image-credit h4">
By <a href="#" role="author" class="text-decoration-none">D.F. Roy</a>,<br> January 14, 2017
</span>
</header>
<footer class="absolute left-0 right-0 bottom-0">
<a class="ampstart-readmore py3 caps line-height-2 text-decoration-none center block h5" href="#content">Read more</a>
</footer>
</figcaption>
</figure>
Şimdi sayfaya göz atalım:
Özet
- Sayfanız için duyarlı gezinme, lokomotif resim ve başlık gibi bir kabuk oluşturdunuz.
- AMP Şablonları hakkında daha fazla bilgi edindiniz ve hızlı bir şekilde sayfa kabuğunu oluşturmak için AMP Start kullanıcı arayüzü bileşenlerini kullandınız.
Bu bölüm için tamamlanmış kodu şu adreste bulabilirsiniz: http://codepen.io/aghassemi/pen/RpRdzV
Sayfamıza duyarlı resimler, videolar, yerleştirilmiş öğeler ve bazı metinler ekleyeceğiz.
Sayfanın içeriğini barındıracak bir main
öğesi ekleyelim. body:
listesinin sonuna ekleyeceğiz
<main id="content">
</main>
Başlık ve paragraf ekleme
Aşağıdakileri alana ekleyin: main
<h2 class="px3 pt2 mb2">Photo Gallery</h2>
<p class="ampstart-dropcap mb4 px3">Vivamus viverra augue libero, vitae dapibus lectus accumsan eget. Pellentesque eget ipsum purus. Maecenas leo odio, ornare nec ex id, suscipit porta ipsum. Ut fringilla semper cursus.</p>
AMP yalnızca HTML olduğundan, bu CSS sınıf adları dışında bu kodla ilgili özel bir şey yoktur. px3
, mb2
ve ampstart-dropcap
nedir? Nereden geliyorlar?
Bu sınıflar AMP HTML'nin bir parçası değildir. AMP Start şablonları, alt düzey bir CSS araç seti sağlamak ve AMP Start'a özel sınıflar eklemek için Basscss'i kullanır.
Bu snippet'te px3
ve mb2
, Basscss tarafından tanımlanır ve sırasıyla Dolgu-sol-sağ ve marj-alt ifadelerine karşılık gelir. AMP AMP tarafından sağlanan ampstart-dropcap
, bir paragrafın ilk harfini daha büyük hale getirir.
Önceden tanımlanmış bu CSS sınıflarıyla ilgili dokümanları http://basscss.com/ ve https://ampstart.com/components adreslerinde bulabilirsiniz.
Şimdi sayfanın nasıl göründüğüne bakalım:
Resim ekleme
AMP'de duyarlı sayfaları oluşturmak kolaydır. Çoğu durumda, bir AMP bileşenini duyarlı hale getirmek, layout="responsive"
özelliği eklemek kadar kolaydır. HTML img
etiketine benzer şekilde amp-img
, çeşitli görüntü alanı genişlikleri ve piksel yoğunlukları için farklı resimler belirtmek amacıyla srcset
özelliğini de destekler.
main
için bir amp-img
ekleyin:
<amp-img
layout="responsive" width="1080" height="720"
srcset="https://unsplash.it/1080/720?image=1043 1080w, https://unsplash.it/720/480?image=1043 720w"
alt="Photo of mountains and trees landscape">
</amp-img>
Bu kodla, layout="responsive"
değerini belirtip width
ve height.
değerlerini sağlayarak duyarlı bir resim oluşturuyoruz.
Duyarlı düzen kullanırken neden genişlik ve yükseklik belirtmem gerekiyor?
Bunun iki nedeni vardır:
- AMP, en boy oranını hesaplamak için genişliği ve yüksekliği kullanır ve genişlik üst kapsayıcısına sığacak şekilde değiştiğinde doğru yüksekliği korur.
- AMP, kaynaklar yüklenmeden önce iyi bir kullanıcı deneyimi sağlamak (sayfaya atlamadan) ve her öğenin boyutunu ve konumunu belirlemek için tüm öğelerde statik boyutlandırma uygular.
Şimdi sayfaya göz atalım:
Otomatik oynatılan video ekleme
AMP, YouTube ve Vimeo gibi birçok video oynatıcıyı destekler. AMP'nin, amp-video
genişletilmiş bileşeni altında HTML5 video
öğesinin kendi sürümü vardır. amp-video
ve amp-youtube
dahil bu video oynatıcılardan bazıları mobil cihazlarda sessiz otomatik oynatmayı da destekler.
amp-img
operatörüne benzer şekilde, amp-video
de layout="responsive"
eklendiğinde duyarlı hale gelebilir
Sayfamıza otomatik oynatılan video ekleyelim.
main:
öğesine başka bir paragraf ve aşağıdaki amp-video
öğesi ekleyin
<p class="my2 px3">Vivamus viverra augue libero, vitae dapibus lectus accumsan eget. Pellentesque eget ipsum purus. Maecenas leo odio, ornare nec ex id, suscipit porta ipsum. Ut fringilla semper cursus.</p>
<amp-video
layout="responsive" width="1280" height="720"
autoplay controls loop
src="https://storage.googleapis.com/ampconf-76504.appspot.com/Bullfinch%20-%202797.mp4">
</amp-video>
Gelin bir göz atalım:
Yerleştirme ekleme
AMP, Twitter ve Instagram gibi birçok üçüncü taraf yerleştirmesi için genişletilmiş bileşenlere sahiptir. AMP bileşeni içermeyen yerleştirmeler için her zaman amp-iframe bulunur.
Sayfamıza Instagram yerleştirilmiş bir sayfa ekleyelim.
amp-img
ve amp-video
öğelerinin aksine amp-instagram
, yerleşik bir bileşen değildir. İçe aktarma komut dosyası etiketi, bileşenin kullanılabilmesi için önce AMP sayfasının head
öğesine dahil edilmelidir.
Kullandığımız AMP Start ortak metni birkaç içe aktarma komut dosyası etiketi içerir. Bunları head
etiketinin başında arayın ve aşağıdaki içe aktarma komut dosyası satırını eklediğinizden emin olun:
<script custom-element="amp-instagram" src="https://cdn.ampproject.org/v0/amp-instagram-0.1.js" async></script>
main:
öğesine başka bir paragraf ve aşağıdaki amp-instagram
öğesi ekleyin
<p class="my2 px3">Vivamus viverra augue libero, vitae dapibus lectus accumsan eget. Pellentesque eget ipsum purus. Maecenas leo odio, ornare nec ex id, suscipit porta ipsum. Ut fringilla semper cursus.</p>
<amp-instagram
layout="responsive" width="566" height="708"
data-shortcode="BJ_sPxzAGyg">
</amp-instagram>
Gelin bir göz atalım:
Bu içerik şimdilik büyük olasılıkla yeterli.
Özet
- AMP'deki duyarlı bileşenler hakkında bilgi edindiniz.
- Farklı türlerde medya ve metin içeriği eklediniz.
Bu bölüme ait tamamlanmış kodu şu adreste bulabilirsiniz: http://codepen.io/aghassemi/pen/OpXGoa
Şimdiye kadar sayfamız için yalnızca statik içerik oluşturduk. Bu bölümde bant, lightbox ve AMP işlemleri gibi bileşenleri kullanarak etkileşimli bir fotoğraf galerisi oluşturacağız.
AMP özel JavaScript'i desteklemese de, kullanıcı işlemlerini alıp işlemek için çeşitli yapı taşlarını gösterir.
Fotoğraf bandı ekleme
Fotoğraf odaklı AMP sayfamızdaki her resmin sayfada görünmesi, mükemmel bir kullanıcı deneyimi oluşturmaz. Neyse ki, yatay olarak kaydırılabilir fotoğraf slaytları oluşturmak için amp-carousel özelliğini kullanabiliriz.
Öncelikle, amp-carousel
için komut dosyası etiketinin head
öğesine dahil edildiğinden emin olalım:
<script custom-element="amp-carousel" src="https://cdn.ampproject.org/v0/amp-carousel-0.1.js" async></script>
Şimdi main:
türüne, birkaç resim içeren slides
türünde duyarlı bir amp-carousel
ekleyelim
<p class="my2 px3">Vivamus viverra augue libero, vitae dapibus lectus accumsan eget. Pellentesque eget ipsum purus. Maecenas leo odio, ornare nec ex id, suscipit porta ipsum. Ut fringilla semper cursus.</p>
<amp-carousel
layout="responsive" width="1080" height="720"
type="slides">
<amp-img src="https://unsplash.it/1080/720?image=1037" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1038" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1039" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1040" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1041" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1042" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1043" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1044" layout="fill"></amp-img>
</amp-carousel>
type="slides"
, tek seferde yalnızca bir resmin görünür olmasını sağlar ve kullanıcıların bu resimleri kaydırabilmesini sağlar.
Bant içindeki resimler için slaytlar boyutunu her zaman alt öğeyle doldurduğundan genişlik ve yükseklik gerektiren farklı bir düzen belirtilmesine gerek kalmadığından layout="fill"
kullanılır.
Haydi deneyelim ve nasıl göründüğüne bakalım:
Küçük resim bandı ekleme
Şimdi bu resimlerin küçük resimleri için yatay kaydırılabilir bir kapsayıcı ekleyelim. <amp-carousel>
ürününü yine, type="slides"
olmadan ve sabit yükseklikteki düzende kullanacağız.
Önceki amp-carousel
öğesinden sonra aşağıdakileri ekleyin.
<amp-carousel layout="fixed-height" height="78" class="mt1">
<amp-img src="https://unsplash.it/108/72?image=1037" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1038" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1039" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1040" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1041" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1042" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1043" layout="fixed" width="108" height="72"></amp-img>
<amp-img src="https://unsplash.it/108/72?image=1044" layout="fixed" width="108" height="72"></amp-img>
</amp-carousel>
Küçük resimler için aynı fotoğrafların layout="fixed"
ve düşük çözünürlüklü sürümlerini kullandığımızı unutmayın.
Gelin bir göz atalım:
Kullanıcılar bir küçük resme dokunduğunda resmi değiştirin
Bunu yapmak için, tap
gibi etkinlikleri slaytı değiştirme gibi işlemlerle ilişkilendirmemiz gerekir.
etkinlik: Bir öğeye etkinlik işleyicileri yüklemek için on
özelliğini kullanabiliriz. tap
etkinliği ise tüm öğelerde desteklenir.
action: amp-carousel
her küçük resim görüntüsünün dokunma etkinliği işleyiciden çağırabileceğimiz bir goToSlide(index=INTEGER)
işlemini gösterir.
Etkinliği ve eylemi bildiğimize göre, artık bunları bir araya getirebiliriz.
Öncelikle, küçük resimlerde dokunma etkinliği işleyiciden referans verebilmemiz için slayt bandına id
vermemiz gerekiyor.
Slaytlar bandına id
özelliği eklemek için mevcut kodunuzu değiştirin (ilki):
<amp-carousel
id="imageSlides"
type="slides"
....
Etkinlik işleyiciyi yükleyelim (her küçük resim görüntüsüne on="tap:imageSlides.goToSlide(index=<slideNumber>)")
:)
<amp-img on="tap:imageSlides.goToSlide(index=0)" role="button" tabindex="1" layout="fixed" ...
<amp-img on="tap:imageSlides.goToSlide(index=1)" role="button" tabindex="1" layout="fixed" ...
<amp-img on="tap:imageSlides.goToSlide(index=2)" role="button" tabindex="1" layout="fixed" ...
...
Ayrıca erişilebilirlik için tabindex
ve ARIA role
ayarlamamız gerekiyor.
Hepsi bu. Artık her bir küçük resme dokunduğunuzda, dönen slayttaki karşılık gelen resim gösterilir.
Kullanıcı küçük resme dokunduğunda küçük resmi vurgulayın
Bunu yapabilir miyiz? Dokunma etkinliği işleyicilerden çağrılacak bir öğeye ilişkin CSS sınıflarını değiştirecek herhangi bir işlem yok. Seçilen küçük resmi nasıl vurgulayabiliriz?
Kurtardığınız <amp-selector>
var!
amp-selector, şu ana kadar kullandığımız bileşenlerden farklıdır. Bu, sayfanın düzenini etkilemediğinden bir sunu bileşeni değildir. Bunun yerine, AMP sayfasının kullanıcının hangi seçeneği sunduğunu bilmesini sağlayan bir yapı taşıdır.
amp-selector
oldukça basittir ancak güçlüdür:
amp-selector
herhangi bir rastgele HTML öğesi veya AMP bileşeni içerebilir.option=<value>
özelliği varsaamp-selector
öğesinin alt öğesi olabilir.- Kullanıcı bir seçenek olan öğeye dokunduğunda
amp-selector
, bu öğeye birselected
özelliği ekler (ve tek seçim modunda diğer seçenek öğelerinden kaldırır). selected
özelliğini bir CSS özelliği seçiciyle hedefleyerek özel CSS'nizdeki seçili öğenin stilini belirleyebilirsiniz.
Şimdi bu görevi yerine getirmemize nasıl yardımcı olabileceğine bakalım.
head
için amp-selector
komut dosyası etiketini ekleyin:
<script custom-element="amp-selector" src="https://cdn.ampproject.org/v0/amp-selector-0.1.js" async></script>
- Küçük resim bandını
amp-selector
sarmalayın option=<value>
özelliği ekleyerek her küçük resmi seçenek haline getirin.selected
özelliğini ekleyerek ilk küçük resmi varsayılan olarak seçin.
<amp-selector>
<amp-carousel layout="fixed-height" height="78" class="mt1">
<amp-img option=0 selected on="tap:imageSlides.goToSlide(index=0)" ...
<amp-img option=1 on="tap:imageSlides.goToSlide(index=1)" ...
...
</amp-carousel>
</amp-selector>
Şimdi, seçilen küçük resmi vurgulamak için stil eklememiz gerekiyor.
AMP Start'tan küçültülmüş CSS ortak öğesinden sonra <style amp-custom>
bölümüne şu özel CSS'yi ekleyin:
<style amp-custom>
...
/* low opacity for non-selected thumbnails */
amp-selector amp-img[option] {
opacity: 0.4;
}
/* normal opacity for the selected thumbnail */
amp-selector amp-img[option][selected] {
opacity: 1;
}
</style>
Gelin bir göz atalım:
İyi görünüyor, ancak bir hata mı fark ettiniz?
Kullanıcı slayt bandını kaydırırsa seçilen küçük resim bunu yansıtacak şekilde güncellenmez. Banttaki geçerli slaytı seçilen küçük resme nasıl bağlayabiliriz?
Sonraki bölümde bunun nasıl yapılacağını öğreneceğiz.
Özet
- Farklı rulo türleri hakkında bilgi edindiniz.
- Kullanıcı bir küçük resme dokunduğunda resim rulosundaki görünür slaytı değiştirmek için AMP işlemlerini ve etkinliklerini kullandınız.
amp-selector
hakkında bilgi edindiniz ve bu aracın ilgi çekici kullanım alanlarını uygulamak için yapı taşı olarak nasıl kullanabileceğinizi öğrendiniz.
Bu bölüme ait tamamlanmış kodu şu adreste bulabilirsiniz: http://codepen.io/aghassemi/pen/gmMJMy
Bu bölümde, önceki bölümden resim galerisinin etkileşimini iyileştirmek için amp-bind'i kullanacağız.
amp-bind
nedir?
Temel AMP bileşeni amp-bind
, veri bağlama ve ifadelerle özel etkileşim oluşturmanıza olanak tanır.
amp-bind
üç temel bölümden oluşur:
- Durum
- Bağlama
- Mutation
Durum, tek bir değerden karmaşık bir veri yapısına kadar her şeyi içeren bir uygulama durumu değişkenidir. Tüm bileşenler, bu paylaşılan değişkeni okuyabilir ve yazabilir.
Bağlama, durumu bir HTML özelliğine veya bir öğenin içeriğine bağlayan bir ifadedir.
Dönüşüm, bazı kullanıcı işlemleri veya etkinliklerinden dolayı durumun değerini değiştirme işlemidir.
amp-bind
gücü, bir mutasyon gerçekleştiğinde başlar: Bu duruma bağlı olan tüm bileşenler bilgilendirilir ve kendilerini yeni durumu yansıtacak şekilde güncellerler.
Uygulama şeklini görelim.
Resim galerisini yeniden uygulamak için amp-bind
kullanın
Önceden, tam resim slayt bandını küçük resimlerdeki tap
etkinliğiyle bağlamak için AMP işlemlerini (örneğin, goToSlide()
) ve seçilen küçük resmi vurgulamak için amp-selector
kullanıyorduk.
amp-bind
veri bağlama yaklaşımını kullanarak bu kodu tamamen nasıl yeniden uygulayabileceğimizi inceleyelim.
Ancak kodlamaya başlamadan önce yaklaşımımızı tasarlayalım:
1. Eyaletimiz nedir?
Bu örnekte, bizim için önemli olan tek değer geçerli slayt numarasının ne olduğu. selectedSlide
2. Bağlamalarımız neler?
selectedSlide
değiştiğinde neyin değişmesi gerekiyor?
- Tam resim bandının görünür
slide
değeri:
<amp-carousel [slide]="selectedSlide" ...
amp-selector
içindekiselected
öğenin de değiştirilmesi gerekiyor. Bu işlem, önceki bölümde karşılaştığımız hatayı düzeltecektir.
<amp-selector [selected]="selectedSlide" ...
3. Mutasyonlarımız neler?
selectedSlide
adlı cihazın ne zaman değişmesi gerekiyor?
- Kullanıcı, kaydırma yaparak tam resim rulosunda yeni bir slayta geçtiğinde:
<amp-carousel on="slideChange:AMP.setState({selectedSlide:event.index})" ...
- Kullanıcı bir küçük resim seçtiğinde:
<amp-selector on="select:AMP.setState({selectedSlide:event.targetOption})" ...
Bir mutasyonu tetiklemek için AMP.setState
işlevini kullanalım. Bu sayede, artık küçük resimde sahip olduğumuz on="tap:imageSlides.goToSlide(index=n)"
kodunun tamamına ihtiyacımız kalmadı.
Her şeyi bir araya getirelim:
head
için amp-bind
komut dosyası etiketini ekleyin:
<script custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js" async></script>
Mevcut galeri kodunu yeni yaklaşımla değiştirin:
<amp-carousel [slide]="selectedSlide" on="slideChange:AMP.setState({selectedSlide:event.index})" type="slides" id="imageSlides" layout="responsive" width="1080" height="720">
<amp-img src="https://unsplash.it/1080/720?image=1037" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1038" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1039" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1040" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1041" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1042" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1043" layout="fill"></amp-img>
<amp-img src="https://unsplash.it/1080/720?image=1044" layout="fill"></amp-img>
</amp-carousel>
<amp-selector [selected]="selectedSlide" on="select:AMP.setState({selectedSlide:event.targetOption})">
<amp-carousel layout="fixed-height" height="78" class="mt1">
<amp-img option=0 selected src="https://unsplash.it/108/72?image=1037" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=1 src="https://unsplash.it/108/72?image=1038" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=2 src="https://unsplash.it/108/72?image=1039" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=3 src="https://unsplash.it/108/72?image=1040" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=4 src="https://unsplash.it/108/72?image=1041" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=5 src="https://unsplash.it/108/72?image=1042" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=6 src="https://unsplash.it/108/72?image=1043" layout="fixed" width="108" height="72"></amp-img>
<amp-img option=7 src="https://unsplash.it/108/72?image=1044" layout="fixed" width="108" height="72"></amp-img>
</amp-carousel>
</amp-selector>
Haydi deneyelim. Bir küçük resme dokunduğunuzda resim slaytları değişir. Resim slaytlarını kaydırdığınızda vurgulanan küçük resim değişir.
Galeriye metin ekleme
Mevcut slaytımızda durumu tanımlamak ve değiştirmek için çok sıkı çalıştık. Mevcut slayt sayısına göre diğer bilgi parçalarını güncellemek için artık kolayca ek bağlama sunabiliriz.
Galerimize "resim x/y" metnini ekleyelim:
Aşağıdaki kodu slayt bandı öğesinin üzerine ekleyin:
<div class="px3">Image <span [text]="1*selectedSlide + 1">1</span> of 8</div>
Bu kez, HTML özelliğine bağlamak yerine [text]=
kullanarak bir öğenin iç metnine bağlanıyoruz.
Haydi deneyelim:
Özet
amp-bind
hakkında bilgi edindiniz.- Resim galerisinin iyileştirilmiş bir sürümünü uygulamak için
amp-bind
kullandınız.
Bu bölüme ait tamamlanmış kodu şu adreste bulabilirsiniz: http://codepen.io/aghassemi/pen/MpeMdL
Sayfamıza animasyon eklemek için bu bölümde iki yeni özellik kullanacağız.
Başlıka paralaks efekti ekleme
amp-fx-collection, özelliklere sahip herhangi bir öğede kolayca etkinleştirilebilen paralaks gibi önceden tanımlanmış görsel efektler koleksiyonu sağlayan bir uzantıdır.
Paralaks efektiyle, kullanıcı sayfayı kaydırdığında öğe, özelliğe atanan değere bağlı olarak daha hızlı veya daha yavaş kaydırılır.
Paralaks efekti, herhangi bir HTML veya AMP öğesine amp-fx="parallax" data-parallax-factor="<a decimal factor>"
özelliği eklenerek etkinleştirilebilir.
- 1'den büyük bir faktör değeri, kullanıcı sayfayı aşağı kaydırdığında öğenin daha hızlı kaydırılmasını sağlar.
- 1'den küçük bir faktör değeri, kullanıcı sayfayı aşağı kaydırdığında öğenin daha yavaş kaymasına neden olur.
Sayfa başlığımıza 1,5 faktörlü paralaks ekleyelim ve sayfanın nasıl göründüğüne bakalım.
head
için amp-fx-collection
komut dosyası etiketini ekleyin:
<script custom-element="amp-fx-collection" src="https://cdn.ampproject.org/v0/amp-fx-collection-0.1.js" async></script>
Şimdi koddaki mevcut başlık başlığını bulun ve buna amp-fx="parallax" and data-parallax-factor="1.5"
özelliğini ekleyin:
<header amp-fx="parallax" data-parallax-factor="1.5" class="p3">
<h1 class="ampstart-fullpage-hero-heading mb3">
<span class="ampstart-fullpage-hero-heading-text">
Most Beautiful Hikes in the Pacific Northwest
</span>
</h1>
<span class="ampstart-image-credit h4">
By <a href="#" role="author" class="text-decoration-none">D.F. Roy</a>,<br> January 14, 2017
</span>
</header>
Sonuca göz atalım:
Başlık, artık sayfanın geri kalanından daha hızlı kaydırılıyor. Havalı!
Sayfaya animasyon ekleme
amp-animation, Web Animations API'sini AMP sayfalarına getiren bir özelliktir.
Bu bölümde, kapak resmi için hafif bir yakınlaştırma efekti oluşturmak üzere amp-animation öğesini kullanacağız.
amp-animation için komut dosyası etiketini head
öğesine ekleyin:
<script custom-element="amp-animation" src="https://cdn.ampproject.org/v0/amp-animation-0.1.js" async></script>
Şimdi animasyonumuzu ve geçerli olduğu hedef öğeyi tanımlamamız gerekiyor.
Animasyonlar, üst düzey bir amp-animation
etiketinin içinde JSON olarak tanımlanır.
Aşağıdaki kodu sayfanızdaki açılış body
etiketinin hemen altına ekleyin.
<amp-animation trigger="visibility" layout="nodisplay">
<script type="application/json">
{
"target": "heroimage",
"duration": 30000,
"delay": 0,
"fill": "forwards",
"easing": "ease-out",
"keyframes": {"transform": "scale(1.3)"}
}
</script>
</amp-animation>
Bu kod, 30 saniyeliğine gecikme olmadan çalışan bir animasyon tanımlar ve resmi% 30 daha büyük olacak şekilde ölçeklendirir.
Animasyon, resim sona erdikten sonra da yakınlaştırmaya devam edebilmesi için yönlendirme fill
değerini tanımlıyoruz. target
, animasyonun uygulandığı öğenin HTML'sidir id
.
Sayfamızdaki lokomotif öğeye id
tarafından bir amp-animation
ekleyelim.
- Kodunuzdaki mevcut lokomotif resmi (
layout="fixed-height"
ile yüksek çözünürlüklü resim) bulun veamp-img
etiketineid="heroimage"
ekleyin. - Kolaylık sağlamak için
media="(min-width: 416px)"
değerini silin ve diğer düşük çözünürlüklüamp-img
kodunu kaldırın. Böylece, şimdilik amp-animation'da birden fazla animasyon ve medya sorgusu ile uğraşmamız gerekmez.
<figure class="ampstart-image-fullpage-hero m0 relative mb4">
<amp-img id="heroimage" height="1800" layout="fixed-height" src="https://unsplash.it/1200/1800?image=1003"></amp-img>
<figcaption class="absolute top-0 right-0 bottom-0 left-0">
...
Fark edebileceğiniz gibi, resmin ölçeklendirilmesi taşmanın üst öğesini taşımasına neden olur. Bu nedenle, taşmayı gizleyerek düzeltmemiz gerekiyor.
Mevcut <style amp-custom>
kuralının sonuna şu CSS kuralını ekleyin:
.ampstart-image-fullpage-hero {
overflow: hidden;
}
Haydi deneyelim ve nasıl göründüğüne bakalım:
Çok hafif!
Ancak bunu yine de CSS ile yapabilirdim. amp-animation
'in amacı nedir?
Bu durumda bu doğrudur, ancak amp-animation
yalnızca CSS ile kullanılamayan ek işlevlere olanak tanır. Örneğin, animasyon görünürlüğe göre tetiklenebilir (ve görünürlüğe göre de duraklatılabilir) ya da bir AMP işlemiyle tetiklenebilir. amp-animation
ayrıca CSS animasyonlarından daha fazla özellik içeren Web Animasyonları API'sini temel alır. Bu API, özellikle birleştirilebilirlikle alakalıdır.
Özet
amp-fx-collection
ile paralaks efektleri oluşturmayı öğrendiniz.amp-animation
hakkında bilgi edindiniz.
Bu bölüm için tamamlanmış kodu şu adreste bulabilirsiniz: http://codepen.io/aghassemi/pen/OpXKzo
Güzel, etkileşimli bir AMP sayfası oluşturmayı tamamladınız.
Bugünkü başarınızı bir kez daha hatırlayarak kutlayalım.
Bitiş sayfasının bağlantısı: http://s.codepen.io/aghassemi/debug/OpXKzo
... ve son kod: http://codepen.io/aghassemi/pen/OpXKzo
Bu codelab için CodePen girişleri koleksiyonuna buradan ulaşabilirsiniz: https://codepen.io/collection/XzKmNB/
Ayrılmadan önce...
Sayfamızın yatay modda tablet gibi diğer form faktörlerinde nasıl göründüğünü kontrol etmeyi unuttuk.
Gelin şunları görelim:
Mükemmel!
İyi günler dileriz.
Sırada ne var?
Bu codelab yalnızca AMP'de mümkün olanın yüzeyini çizer. Muhteşem AMP sayfaları oluşturmanıza yardımcı olacak birçok kaynak ve codelab' vardır:
- https://amp.dev
- https://ampstart.com/bileşenler
- AMP temelleri codelab'i
- AMP gelişmiş kavramlar codelab'i
Sorularınız varsa veya sorunlarla karşılaşırsanız lütfen AMP Slack kanalında bizi bulun ya da GitHub'da tartışmalar, hata raporları veya özellik istekleri oluşturun.