Añade fuentes de forma dinámica a tu web usando Javascript y FontFace
12094 단어 spanishtutorialjavascriptwebdev
@font-face
, pero que ocurre si quieres permitir a tus usuarios cambiar la fuente que utilizan para renderizar lo que ven en base a una fuente que ellos pueden subir?.Bienvenido Javascript 및 FontFace.
¿Cuándo puede ser esto útil?
Es claro que puedes utilizar cualquier fuente por medio de css, pero el caso de uso aquí es algo diferente.
Imagina que tienes un sistema de templates o temas/themes para permitir que tus usuarios personalicen su interfaz como gusten. Una de las posibles personalizaciones es cambiar la fuente utilizada, pero no sólo seleccionando de un listado pre-definido, si no, también permitiendo que suban sus propias fuentes.
¿Cómo muestras una vista previa de cómo se vería esta fuente? Lo que necesitas es:
Esto es posible gracias a la APIFontFace yFileReader
¿Cómo "subir" una fuente?
Lo primero será permitir al usuario subir una nueva fuente, esto es básicamente permitir que el usuario suba un archivo.
Cualquier 프레임워크를 사용하는 사용자는 간단한 "바닐라 자바스크립트"를 사용하여 자유자재로 사용할 수 있습니다.
/** HTML
<input type="fileInput" id="file" accept={".ttf"} />
<button type="button" id="uploadBtn">Upload Font</button>
**/
const fileInput = document.getElementById("fileInput");
const uploadBtn = document.getElementById("upload");
uploadBtn.addEventListener("click", async () => {
const fontFile = fileInput.files[0]
});
Lo que este pequeño snippet de código realiza es:
fileInput
y uploadBtn
desde el DOM. uploadBtn
para "escuchar"por el evento click
uploadBtn
recibe el evento, un callback se ejecuta leyendo desde el input fileInput
el archivo seleccionado por el usuario Ahora, toca insertar en el documento la nueva fuente
Este es un demo, pero para completarlo deberías asegurarte que el archivo, tiene al menos la extensión requerida.
Insertar una nueva fuente en el documento.
Ya tienes una referencia al archivo seleccionado por el usuario, para poder insertar esta nueva fuente necesitarás usar la api
FontFace
.Esta api permite controlar el origen de una fuente, sea esta una URL externa o un buffer. También permite conocer y controlar cuando la fuente es cargada.
Además, contenido de ese archivo는 "데이터 URL"(데이터 URL의 base64에 대한 대표자)으로 변환해야 하며, API 사용
FileReader
에 필요합니다.FileReader
es un objeto que permite a tu app leer un archivo y almacenar esa información utilizando un objeto File o BlobEl objetoFile는 문서 조작 허가 정보를 증명합니다. Por ejemplo convirtiendo su información a otro formato, en este caso utilizarás
FileReader.readAsDataURL
./**
* Recibe una referencia a un archivo `File`
*/
const convertFontFiletoBase64 = async (file) => {
const result_base64 = await new Promise((resolve) => {
// crea un objeto FileReader
const fileReader = new FileReader();
// Agrega un callback a ser ejecutado cuando el fileReader este "listo"
fileReader.onload = () => resolve(fileReader.result);
// Obtiene la información del archivo
fileReader.readAsDataURL(file);
});
return result_base64;
};
uploadBtn.addEventListener("click", async () => {
// Obtiene la información del archivo en formato base64
const base64 = await convertFontFiletoBase64(fileInput.files[0]);
// Crea una referencia al objeto FontFace
const fontFace = new FontFace("uploadedFont", `url(${base64})`);
// Agrega la nueva fuente al documento
document.fonts.add(fontFace); //
try {
// Carga la fuente
await fontFace.load();
} catch (e) {
console.error(e);
}
});
Una vez leída la información del archivo en formato base 64, utilizarás
FontFace
para crear una referencencia, luego utilizando document.fonts.add()
se agrega la nueva fuente y finalmente se solicita que dicha fuente se cargue con fontFace.load()
En este punto ya estás listo para mostrar un previo utilizando como nombre de la fuente el string
uploadedFont
(que fue pasado a la creación deFontFace
).모스라르 우나 비스타 프리비아 데 라 푸엔테
Para esta tarea simplemente necesitarás un contenedor de texto cuyo estilo este definido para usar la nueva fuente
uploadedFont
<style>
#textContainer span {
font-family: "uploadedFont";
}
</style>
<div id="textContainer">
<span>
Sample Text
</span>
</div>
También puedes hacerlo dinámicamente utilizando Javascript.
....
try {
await fontFace.load();
const textContainer = document.getElementById("textContainer");
textContainer.setAttribute("style", "font-family: uploadedFont");
} catch (e) {
console.error(e);
}
...
다음 코드샌드박스에서 데모를 확인하세요.
✉️ Únete a Micro-bytes 🐦 Sígueme en ❤️ Apoya mi trabajo
Reference
이 문제에 관하여(Añade fuentes de forma dinámica a tu web usando Javascript y FontFace), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/matiasfha/anade-fuentes-de-forma-dinamica-a-tu-web-usando-javascript-y-fontface-113m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)