Google AMP - การเชื่อมโยงข้อมูล
Amp-bind ช่วยเพิ่มการโต้ตอบให้กับ amp-components และแท็ก html ตามการดำเนินการโดยใช้นิพจน์การผูกข้อมูลและคล้าย JS บทนี้จะกล่าวถึงการผูกข้อมูลโดยละเอียด
ในการทำงานกับ amp-bind เราจำเป็นต้องเพิ่มสคริปต์ต่อไปนี้ในหน้าของเรา -
<script async custom-element = "amp-bind"
src = "https://cdn.ampproject.org/v0/amp-bind-0.1.js">
</script>
ให้เราเข้าใจอย่างถ่องแท้โดยใช้ตัวอย่างการทำงานดังที่แสดง -
ตัวอย่าง
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Bind</title>
<link rel = "canonical" href =
"http://example.ampproject.org/article-metadata.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 custom-element = "amp-bind"
src = "https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
<style amp-custom>
button{
background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
}
</style>
</head>
<body>
<h3>Google AMP - Amp Bind</h3>
<p [text] = "'Hello ' + world + '.'">
Click on the button to change the text
</p>
<button on = "tap:AMP.setState({world: 'This is amp-bind example'})">
Click Here
</button>
</body>
</html>
เอาต์พุต
คลิกปุ่มเพื่อดูข้อความที่เปลี่ยนแปลงตามที่แสดงด้านล่าง -
ดังนั้นในตัวอย่างที่แสดงด้านบนเราจึงใช้ amp-bind เพื่อเปลี่ยนข้อความเมื่อคลิกปุ่ม
Amp-bind มีสามองค์ประกอบ -
State- เริ่มแรกสถานะว่างเปล่า เมื่อคุณคลิกปุ่มสถานะจะเปลี่ยนไป ตัวอย่างเช่น,
<button on = "tap:AMP.setState({world: 'This is amp-bind example'})">
Click Here
</button>
วิธี AMP.setState ใช้เพื่อเปลี่ยนสถานะ ตัวแปรworld ได้รับการกำหนดค่า This is amp-bind example. ตัวแปรworld ถูกใช้ภายในแท็ก html -
<p [text] = "'Hello ' + world + '.'">
Click on the button to change the text
</p>
เมื่อคลิกปุ่มโลกจะถูกกำหนดค่าใหม่: นี่คือตัวอย่างการผูกแอมป์
นอกจากนี้เรายังสามารถใช้ amp-state กับการผูกได้ดังที่แสดงด้านล่าง -
<amp-state id = "myState">
<script type = "application/json">
{
"foo": "bar"
}
</script>
</amp-state>
จะมีการกำหนดนิพจน์ bmyState.foo ระหว่างการผูก
Expressions - นิพจน์สำหรับ amp-bind ในการทำงานมีดังนี้ -
'Hello ' + world
world กล่าวกันว่าเป็น state variable.
Bindings- การเชื่อมโยงใช้กับแอตทริบิวต์พิเศษในรูปแบบ [แอตทริบิวต์] ตัวอย่างเช่น -
<p [text] = "'Hello ' + world + '.'">
Click on the button to change the text
</p>
ในตัวอย่างข้างต้น [text] มีนิพจน์ที่ใช้สำหรับผูกไฟล์ p แท็ก
เราสามารถใช้แอตทริบิวต์ต่อไปนี้สำหรับการผูก -
- [text]
- [class]
- [hidden]
- [width]
- [height]
การเชื่อมโยงยังสามารถทำได้บนส่วนประกอบแอมป์และอนุญาตให้ใช้เฉพาะแอตทริบิวต์ที่เฉพาะเจาะจงเท่านั้น รายการต่อไปนี้แสดงส่วนประกอบและคุณลักษณะของ suh -
ซีเนียร์ No | ส่วนประกอบแอมป์ | คุณสมบัติและคำอธิบาย |
---|---|---|
1 | <amp-carousel type = slides> | [slide]* เปลี่ยนสไลด์โดยใช้ลักษณะการผูกนี้ |
2 | <amp-date-picker> | [min] ขั้นต่ำ -> ตั้งค่าวันที่ที่เลือกได้เร็วที่สุด [max]สูงสุด -> ตั้งค่าวันที่เลือกล่าสุด |
3 | <amp-iframe> | [src] เปลี่ยน src ของ iframe |
4 | <amp-img> | [alt] [attribution] [src] [srcset] เราสามารถเปลี่ยน alt, การระบุแหล่งที่มา, src และ srcset ได้หากมีการเปลี่ยนแปลง src ให้เปลี่ยน srcset ตามที่ใช้ในการแคช |
5 | <amp-lightbox> | [open]* คุณสามารถแสดง / ซ่อนไลท์บ็อกซ์โดยผูกเพื่อเปิด |
6 | <amp-list> | [src] หากนิพจน์เป็นสตริงให้ดึงข้อมูลและแสดงผล JSON จากสตริง URL หากนิพจน์เป็นอ็อบเจ็กต์หรืออาร์เรย์ให้แสดงข้อมูลนิพจน์ |
7 | <amp-selector> | [selected]* [disabled] เปลี่ยนองค์ประกอบลูกที่เลือกในปัจจุบันที่ระบุโดยค่าแอตทริบิวต์ตัวเลือก รองรับรายการค่าที่คั่นด้วยจุลภาคสำหรับการเลือกหลายรายการ |
การผูกโดยใช้ Amp-State
เราสามารถกำหนด amp-state กับข้อมูลทั้งหมดที่เราต้องการใช้กับ html element หรือ amp-component
ข้อมูลที่ใช้ภายใน amp-state จะต้องอยู่ในรูปแบบ json ดังที่แสดงด้านล่าง -
<amp-state id = "myCarsList">
<script type = "application/json">
{
"currentcar" : "bmw",
"audi": {
"imageUrl": "images/audi.jpg"
},
"bmw": {
"imageUrl": "images/bmw.jpg"
}
}
</script>
</amp-state>
ดังนั้นเราจึงกำหนดคู่คีย์ - ค่าด้วยชื่อของรถและรูปภาพที่ใช้สำหรับรถ
Amp-bind บนข้อความและ Amp-Image
ตัวอย่างการทำงานโดยใช้ amp-state กับ amp-bind แสดงอยู่ด้านล่าง -
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Bind</title>
<link rel = "canonical" href =
"http://example.ampproject.org/article-metadata.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 custom-element = "amp-bind" src =
"https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
<style amp-custom>
button{
background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
float: left;
}
</style>
</head>
<body>
<h3>Google AMP - Amp Bind</h3>
<amp-state id = "myCarsList">
<script type = "application/json">
{
"currentcar" : "bmw",
"audi": {
"imageUrl": "images/audi.jpg",
"style": "greenBackground"
},
"bmw": {
"imageUrl": "images/bmw.jpg",
"style": "redBackground"
}
}
</script>
</amp-state>
<amp-img
width = "300"
height = "200"
src = "images/bmw.jpg"
[src] = "myCarsList[currentcar].imageUrl">
</amp-img>
<p [text] = "'This is a ' + currentcar + '.'">
This is a BMW.
</p>
<br/>
<button on = "tap:AMP.setState({currentcar: 'audi'})">
Change Car
</button>
</body>
</html>
เอาต์พุต
คลิกปุ่มเพื่อดูภาพของรถที่เปลี่ยนไปและข้อความด้านล่าง
Amp-bind บนวิดีโอและ IFrame
ตอนนี้เราจะเห็นตัวอย่างการทำงานซึ่งจะเปลี่ยน amp-iframe และ amp-video src
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Bind</title>
<link rel = "canonical" href =
"http://example.ampproject.org/article-metadata.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 custom-element = "amp-bind" src =
"https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
<script async custom-element = "amp-video" src =
"https://cdn.ampproject.org/v0/amp-video-0.1.js"></script>
<script async custom-element = "amp-iframe" src =
"https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>
<style amp-custom>
button{
background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
float: left;
}
</style>
</head>
<body>
<h3>Google AMP - Amp Bind</h3>
<button on = "tap:AMP.setState({currentlist: 'list1'})">
Click Here
</button>
<br/>
<br/>
<amp-state id = "myList">
<script type = "application/json">
{
"currentlist" : "",
"list1": {
"url": "video/m.mp4",
"style": "greenBackground",
"iframeurl":"https://maps.google.com/maps?q=hyderabad&t=&z=13&ie=UTF8&iwloc=&output=embed"
}
}
</script>
</amp-state>
<h3>AMP - IFRAME</h3>
<amp-iframe
width = "600"
title = "Google map"
height = "400"
layout = "responsive"
sandbox = "allow-scripts allow-same-origin allow-popups"
frameborder = "0"
src = "https://maps.google.com/maps?q=telangana&t=&z=13&ie=UTF8&iwloc=&output=embed"
[src] = "myList[currentlist].iframeurl">
<amp-img
layout = "fill"
src = "images/loading.jpg"
placeholder
>
/amp-img>
</amp-iframe>
<h3>AMP - VIDEO</h3>
<amp-video
id = "amp-video"
src = "video/samplevideo.mp4"
layout="responsive"
[src] = "myList[currentlist].url"
width = "300"
height = "170" autoplay controls>
</amp-video>
</body>
</html>
โปรดทราบว่าที่นี่เราได้ใช้ amp-state กับ iframesrc และ video src
<amp-state id = "myList">
<script type = "application/json">
{
"currentlist" : "",
"list1": {
"url": "video/m.mp4",
"style": "greenBackground",
"iframeurl":"
https://maps.google.com/maps?q=hyderabad&t=&z=13&ie=UTF8&iwloc=&output=embed"
}
}
</script>
</amp-state>
รายการปัจจุบันถูกตั้งค่าเป็นว่างและเมื่อแตะปุ่มจะตั้งค่าเป็น list1 รายการปัจจุบันใช้สำหรับ src ของ iframe และวิดีโอดังที่แสดงด้านล่าง -
<amp-iframe width="600"
title = "Google map"
height = "400"
layout = "responsive"
sandbox = "allow-scripts allow-same-origin allow-popups"
frameborder = "0" src = "https://maps.google.com/maps?q=telangana&t=&z=13&ie=UTF8&iwloc=&output=embed"
[src] = "myList[currentlist].iframeurl">
<amp-img layout = "fill" src = "images/loading.jpg" placeholder>
</amp-img>
</amp-iframe>
<amp-video id = "amp-video" src = "video/samplevideo.mp4"
layout = "responsive" [src] = "myList[currentlist].url" width = "300"
height = "170" autoplay controls>
</amp-video>
เอาต์พุต
คลิกปุ่มเพื่อดูวิดีโอและ iframe src ที่เปลี่ยนไป
แอมป์ผูกกับแอมป์ไลท์บ็อกซ์
ตอนนี้ให้เราดูการทำงานของการรวมและ amp-lightbox เมื่อใช้ร่วมกัน
ตัวอย่าง
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src="https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Bind</title>
<link rel = "canonical" href =
"http://example.ampproject.org/article-metadata.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 custom-element = "amp-bind" src =
"https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
<script async custom-element = "amp-lightbox" src =
"https://cdn.ampproject.org/v0/amp-lightbox-0.1.js"></script>
<style amp-custom>
button{
background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
float: left;
}
.lightbox {
background: rgba(211,211,211,0.8);
width: 100%;
height: 100%;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
}
</style>
</head>
<body>
<h3>Google AMP - Amp Bind</h3>
<button on = "tap:AMP.setState({displaylightbox: true})">
Click Here
</button>
<br/>
<br/>
<h3>AMP - Lightbox</h3>
<amp-lightbox
id = "my-lightbox"
[open] = "displaylightbox"
layout = "nodisplay"
close-button>
<div class = "lightbox" on = "tap:AMP.setState({displaylightbox: false})">
<amp-img alt = "Beautiful Flower"
src = "images/loreal.gif"
width = "246"
height = "205">
</amp-img>
</div>
</amp-lightbox>
</body>
</html>
ในการใช้การผูกกับ amp-lightbox เราได้ใช้ [open] บน amp-lightbox ดังที่แสดงด้านล่าง -
<amp-lightbox id = "my-lightbox" [open] = "displaylightbox"
layout = "nodisplay" close-button>
<div class = "lightbox" on="tap:AMP.setState({displaylightbox: false})">
<amp-img alt = "Beautiful Flower"
src = "images/loreal.gif"
width = "246"
height = "205">
</amp-img>
</div>
</amp-lightbox>
[open] =“ displaylightbox” คือสถานะตัวแปรจะถูกเปลี่ยนเมื่อคลิกปุ่มและเมื่อแตะที่ไลท์บ็อกซ์ div เป็น true / false -
<button on = "tap:AMP.setState({displaylightbox: true})">
Click Here
</button>
<div class = "lightbox" on = "tap:AMP.setState({displaylightbox: false})">
<amp-img alt = "Beautiful Flower"
src = "images/loreal.gif"
width = "246"
height = "205">
</amp-img>
</div>
เอาต์พุต
แอมป์เชื่อมโยงกับองค์ประกอบอินพุต
ให้เราเข้าใจการทำงานของการผูกแอมป์กับองค์ประกอบอินพุตด้วยความช่วยเหลือของตัวอย่างการทำงานดังที่แสดง -
<!doctype html>
<html amp lang = "en">
<head>
<meta charset = "utf-8">
<script async src = "https://cdn.ampproject.org/v0.js"></script>
<title>Google AMP - Amp Bind</title>
<link rel = "canonical" href=
"http://example.ampproject.org/article-metadata.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 custom-element = "amp-bind"
src = "https://cdn.ampproject.org/v0/amp-bind-0.1.js">
<script>
<script async custom-element = "amp-lightbox"
src = "https://cdn.ampproject.org/v0/amp-lightbox-0.1.js">
</script>
<style amp-custom>
button{
background-color: #ACAD5C;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
float: left;
}
.lightbox {
background: rgba(211,211,211,0.8);
width: 100%;
height: 100%;
position: absolute;
display: flex;
align-items: center;
justify-content: center;
}
#txtname{
width: 100%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
div {
font-size:25px;
}
</style>
</head>
<body>
<h3>Google AMP - Amp Bind</h3>
<button on = "tap:AMP.setState({displaylightbox: true})">
Click Here
</button>
<br/>
<br/>
<h3>
AMP - Input Element
<h3>
<input id = "txtname" placeholder = "Type here"
on = "input-throttled:AMP.setState({name: event.value})">
<div [text] = "name">
</div>
</body>
</html>
เอาต์พุต
ข้อมูลที่ป้อนภายในกล่องข้อความจะแสดงที่ด้านล่าง สามารถทำได้โดยการเปลี่ยนตัวแปรสถานะname ในเหตุการณ์อินพุตดังที่แสดง -
<input id = "txtname" placeholder = "Type here" on =
"input-throttled:AMP.setState({name: event.value})">
<div [text] = "name">
</div>