LitElement 및 VanillaJS에 트위터 삽입
그런 다음 시작하면서 "음.. 이것은 유용한 튜토리얼이 될 것 같습니다."라고 생각하여 사람들이 원하는 내용을 물었습니다.
${this.btoPro}
내가 그것을 어떻게 만들었는지 보여주기 위해 비디오를 만들 예정인 twitter-embed에서 작업하고 있습니다/dev[dot]to에 대한 프로세스 및 포스트를 통해 이야기합니다. 나는 그것을 0에서 끝까지 끝까지 할 생각입니다/그것을하는 다른 방법을 보여주십시오; 답글의 생각
오후 14:43 - 2020년 8월 26일
1
1
다음은 전체 동영상 안내입니다. 아래에 코드와 다루는 내용을 게시하겠습니다.
비디오의 링크
VanillaJS
바닐라 버전의 코드는 다음과 같습니다. 100줄입니다.
class TwitterEmbed extends HTMLElement {
static get tag() {
return "twitter-embed";
}
/**
* HTMLElement spec / class based architecture in general
*/
constructor() {
super();
this.dataWidth = this.getAttribute("data-width")
? this.getAttribute("data-width")
: "550px";
this.dataTheme = this.getAttribute("data-theme")
? this.getAttribute("data-theme")
: "light";
this.tweet = this.getAttribute("tweet") ? this.getAttribute("tweet") : null;
this.tweetId = this.getAttribute("tweet-id")
? this.getAttribute("tweet-id")
: null;
this.allowPopups = this.getAttribute("no-popups") ? "" : "allow-popups";
}
/**
* HTMLElement spec
*/
static get observedAttributes() {
return ["tweet", "data-width", "data-theme", "tweet-id", "no-popups"];
}
/**
* HTMLElement spec
*/
attributeChangedCallback(attr, oldValue, newValue) {
if (attr == "tweet" && newValue && newValue.includes("twitter.com")) {
this.tweetId = newValue.split("/").pop();
}
if (attr == "no-popups") {
this.allowPopups =
newValue == "no-popups" ||
newValue == "" ||
!newValue ||
newValue == null ||
newValue == "null"
? ""
: "allow-popups";
}
if (["no-popups", "tweet-id", "data-width", "data-theme"].includes(attr)) {
this.innerHTML = this.html;
}
}
get dataWidth() {
return this.getAttribute("data-width");
}
set dataWidth(value) {
if (value == null || !value) {
this.removeAttribute("data-width");
} else {
this.setAttribute("data-width", value);
}
}
get dataTheme() {
return this.getAttribute("data-theme");
}
set dataTheme(value) {
if (!value || !["dark", "light"].includes(value)) {
this.dataTheme = "light";
} else {
this.setAttribute("data-theme", value);
}
}
get tweetId() {
return this.getAttribute("tweet-id");
}
set tweetId(value) {
if (value == null) {
this.removeAttribute("tweet-id");
} else {
this.setAttribute("tweet-id", value);
}
}
get tweet() {
return this.getAttribute("tweet");
}
set tweet(value) {
if (value == null) {
this.removeAttribute("tweet");
} else {
this.setAttribute("tweet", value);
}
}
/**
* my own convention, easy to remember
*/
get html() {
return `
<div
class="twitter-tweet twitter-tweet-rendered"
style="display: flex; max-width: ${
this.dataWidth
}; width: 100%; margin-top: 10px; margin-bottom: 10px;">
<iframe
sandbox="allow-same-origin allow-scripts ${this.allowPopups}"
scrolling="no"
frameborder="0"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
style="position: static; visibility: visible; width: ${
this.dataWidth
}; height: 498px; display: block; flex-grow: 1;"
title="Twitter Tweet"
src="https://platform.twitter.com/embed/index.html?dnt=true&&frame=false&hideCard=false&hideThread=false&id=${
this.tweetId
}&lang=en&origin=http%3A%2F%2Flocalhost%3A8000%2Felements%2Ftwitter-embed%2Fdemo%2Findex.html&theme=${
this.dataTheme
}&widgetsVersion=223fc1c4%3A1596143124634&width=${this.dataWidth}"
data-tweet-id="${this.tweetId}">
</iframe>
</div>`;
}
}
customElements.define(TwitterEmbed.tag, TwitterEmbed);
export { TwitterEmbed };
장점
단점
조명 요소
LitElement는 인기 있는
import { LitElement, html } from "lit-element/lit-element.js";
class TwitterEmbedLit extends LitElement {
static get tag() {
return "twitter-embed-lit";
}
/**
* HTMLElement spec
*/
constructor() {
super();
this.dataWidth = "550px";
this.dataTheme = "light";
this.tweet = null;
this.tweetId = null;
this.allowPopups = "allow-popups";
}
/**
* LitElement properties definition
*/
static get properties() {
return {
tweet: {
type: String
},
dataWidth: {
type: String,
attribute: "data-width"
},
dataTheme: {
type: String,
attribute: "data-theme"
},
tweetId: {
type: String,
attribute: "tweet-id"
},
noPopups: {
type: Boolean,
attribute: "no-popups"
},
allowPopups: {
type: String
}
};
}
/**
* LitElement equivalent of attributeChangedCallback
*/
updated(changedProperties) {
changedProperties.forEach((oldValue, propName) => {
if (propName === "noPopups") {
if (this[propName]) {
this.allowPopups = "";
} else {
this.allowPopups = "allow-popups";
}
}
if (
propName === "tweet" &&
this[propName] &&
this[propName].includes("twitter.com")
) {
this.tweetId = this[propName].split("/").pop();
}
});
}
/**
* Popular convention / LitElement
*/
render() {
return html`
<div
class="twitter-tweet twitter-tweet-rendered"
style="display: flex; max-width: ${this
.dataWidth}; width: 100%; margin-top: 10px; margin-bottom: 10px;"
>
<iframe
sandbox="allow-same-origin allow-scripts ${this.allowPopups}"
scrolling="no"
frameborder="0"
loading="lazy"
allowtransparency="true"
allowfullscreen
style="position: static; visibility: visible; width: ${this
.dataWidth}; height: 498px; display: block; flex-grow: 1;"
title="Twitter Tweet"
src="https://platform.twitter.com/embed/index.html?dnt=true&frame=false&hideCard=false&hideThread=false&id=${this
.tweetId}&lang=en&origin=http%3A%2F%2Flocalhost%3A8000%2Felements%2Ftwitter-embed%2Fdemo%2Findex.html&theme=${this
.dataTheme}&widgetsVersion=223fc1c4%3A1596143124634&width=${this
.dataWidth}"
data-tweet-id="${this.tweetId}"
>
</iframe>
</div>
`;
}
}
customElements.define(TwitterEmbedLit.tag, TwitterEmbedLit);
export { TwitterEmbedLit };
단점
장점
Reference
이 문제에 관하여(LitElement 및 VanillaJS에 트위터 삽입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/btopro/twitter-embed-in-litelement-and-vanillajs-olm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)