"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 펜으로 텍스트 강조 표시 모방

펜으로 텍스트 강조 표시 모방

2024-08-06에 게시됨
검색:283

Imitation of highlighting text with a pen

이 코드펜은 Sten Hougaard의 작업에서 영감을 받았습니다.

준비

다양한 애니메이션 구현을 위해 두 개의 컨테이너를 만들어 보겠습니다.

Animated text

Click on me!

Adobe Illustrator를 사용하여 svg를 만들었습니다. 주요 기능은 높이가 작고 너비가 크다는 것입니다.
svg가 헤더 요소의 하위 요소라는 점을 언급하는 것이 중요합니다. svg를 헤더 요소에 상대적으로 배치하기 때문입니다.

CSS

컨테이너를 가변박스로 변환하여 모든 것을 중앙에 우아하게 배치합니다.

.container {
 display: flex;
 place-content: center;
}

h1 {
 display: inline;
 position: relative;
}   

inline은 svg가 이에 의존하므로 요소의 너비를 콘텐츠로 줄이는 데 사용됩니다.

다음으로 헤더를 기준으로 svg의 위치를 ​​지정해야 합니다.

svg {
 min-width: 110%;
 min-height: 100%;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%,-50%);
}

표준 방법을 사용하여 상대 요소를 상위 요소의 중앙에 배치합니다. svg를 텍스트에 맞게 조정하려면 min-width 및 min-height를 적용해야 합니다.

자바스크립트를 사용한 애니메이션 로직

자바스크립트에서 요소에 애니메이션을 적용하려면 멋진 애니메이션(키프레임, 옵션) 방법을 사용할 수 있습니다.

키프레임

반복할 속성을 제공하는 get DrawingParameters 함수를 분석해 보겠습니다.

const getDrawingParameters = (path) => {
 const length = path.getTotalLength();
 path.style.strokeDasharray = length;
 const drawingProperties = [
  { strokeDashoffset: length, easing: "ease-in" },
  { strokeDashoffset: 0, offset: 0.15 }
 ];
 return drawingProperties;
};

먼저 svg 메소드 getTotalLength:
를 사용하여 경로가 실제로 얼마나 긴지 알아야 합니다.

const length = path.getTotalLength();

이제 계산된 길이를 사용하여 그림을 시뮬레이션해야 합니다. 시작점을 정의해 보겠습니다. 스트로크Dasharray:
속성이 필요합니다.

path.style.strokeDasharray = length;

여기서 이 속성은 하나의 대시(크기=길이)와 하나의 간격(크기=길이)을 교대로 사용하여 경로를 그리도록 지시합니다.


길이가 필요한 다음 속성은 Stroke-dashoffset:
입니다.

path.style.strokeDashoffset = length;

이 값은 대시 배열 계산이 길이 값으로 당겨진다는 것을 나타냅니다. 그리고 대시 배열을 '대시 길이 갭 길이 ​​대시 길이 갭 길이 ​​...'로 설정했기 때문에 시작 경로는 비어 있습니다(갭).


따라서 반복 가능한 속성을 배열로 정의합니다.

 const drawingProperties = [
  { strokeDashoffset: length, easing: "ease-in" },
  { strokeDashoffset: 0, offset: 0.15 }
 ];

오프셋을 사용하여 이 속성에 도달해야 하는 상대 시간을 정의합니다. 매 iteration마다 딜레이를 흉내내도록 만들어졌습니다.

옵션

animate 메소드의 두 번째 인수는 옵션입니다:

animatedPath.animate(
 getDrawingParameters(animatedPath), 
 {duration: 10000, iterations: Infinity}
);

애니메이션을 무한 반복 및 10초 지속 시간으로 설정했습니다. 오프셋을 기억하시나요? "활성" 애니메이션은 1.5초 밖에 걸리지 않습니다.

릴리스 선언문 이 글은 https://dev.to/jsha/imitation-of-highlighting-text-with-a-pen-3b84?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>
  • 프록시 디자인 패턴
    프록시 디자인 패턴
    이전 블로그에서 객체 생성 메커니즘을 다루는 다양한 창의적 디자인 패턴을 살펴봤습니다. 이제 객체와 클래스를 구성하여 유연성과 효율성을 유지하면서 더 큰 구조를 형성하는 방법에 초점을 맞춘 구조적 디자인 패턴을 살펴보겠습니다. 프록시 디자인 패턴부터 시작해 보겠습니다....
    프로그램 작성 2024-11-06에 게시됨
  • \"src\" 속성을 사용하여 외부 JavaScript 파일에 인라인 스크립트를 포함할 수 있습니까?
    \"src\" 속성을 사용하여 외부 JavaScript 파일에 인라인 스크립트를 포함할 수 있습니까?
    SRC 속성을 사용하여 외부 JavaScript 파일에 인라인 스크립트를 포함할 수 있습니까?JavaScript는 일반적으로 외부 스크립트 파일을 사용하여 포함되지만, 일반적인 질문이 생깁니다. src 속성을 사용하여 외부 파일 내에 인라인 스크립트를 통합할 수 있습니...
    프로그램 작성 2024-11-06에 게시됨
  • Go에서 HTTP POST 요청의 진행 상황을 추적하는 방법은 무엇입니까?
    Go에서 HTTP POST 요청의 진행 상황을 추적하는 방법은 무엇입니까?
    Go에서 HTTP POST 요청 진행 상황 추적POST 요청을 통해 대용량 파일과 이미지를 보낼 때 개발자는 업로드 진행 상황을 추적하는 데 종종 어려움을 겪습니다. . 이 질문은 Go 애플리케이션에서 이러한 요청의 진행 상황을 모니터링하는 신뢰할 수 있는 방법을 탐구...
    프로그램 작성 2024-11-06에 게시됨
  • Java의 폴더에서 파일 이름 목록을 어떻게 얻을 수 있습니까?
    Java의 폴더에서 파일 이름 목록을 어떻게 얻을 수 있습니까?
    Java를 사용하여 폴더에서 파일 이름 가져오기디렉토리 내의 파일 이름 목록을 가져오는 작업은 다양한 환경에서 일반적인 요구 사항입니다. 프로그래밍 시나리오. Java에서 이를 달성하려면 File 클래스를 활용하는 간단한 접근 방식이 있습니다.코드 접근 방식:시작하려면...
    프로그램 작성 2024-11-06에 게시됨
  • 각도 파이프: 종합 가이드
    각도 파이프: 종합 가이드
    Angular의 파이프는 기본 데이터를 수정하지 않고 템플릿의 데이터를 변환하는 데 사용되는 간단한 함수입니다. 파이프는 값을 가져와서 처리하고 형식이 지정되거나 변환된 출력을 반환합니다. 날짜, 숫자, 문자열은 물론 배열이나 객체의 형식을 지정하는 데 자주 사용됩니다...
    프로그램 작성 2024-11-06에 게시됨
  • Tailwind CSS 및 다크 모드
    Tailwind CSS 및 다크 모드
    이 도움말에서는 Tailwind CSS에서 어두운 모드를 구현하는 방법을 살펴보겠습니다. 다크 모드는 저조도 환경에서 더 나은 사용자 경험을 제공하고 눈의 피로를 줄여주기 때문에 인기 있는 디자인 트렌드가 되었습니다. Tailwind를 사용하면 내장된 유틸리티를 통해 ...
    프로그램 작성 2024-11-06에 게시됨
  • CakePHP의 Find 메소드를 사용하여 JOIN 쿼리를 수행하는 방법은 무엇입니까?
    CakePHP의 Find 메소드를 사용하여 JOIN 쿼리를 수행하는 방법은 무엇입니까?
    JOIN을 사용한 CakePHP 찾기 메서드CakePHP 찾기 메서드는 테이블 조인을 포함하여 데이터베이스에서 데이터를 검색하는 강력한 방법을 제공합니다. 이 문서에서는 CakePHP의 find 메소드를 사용하여 JOIN 쿼리를 수행하는 두 가지 방법을 보여줍니다.방법...
    프로그램 작성 2024-11-06에 게시됨
  • 결과를 다시 계산하거나 저장하지 않고 Python에서 생성기를 어떻게 재사용할 수 있나요?
    결과를 다시 계산하거나 저장하지 않고 Python에서 생성기를 어떻게 재사용할 수 있나요?
    재설정을 통해 Python에서 생성기 재사용Python에서 생성기는 일련의 요소를 반복하기 위한 강력한 도구입니다. 그러나 반복이 시작된 후에는 생성기를 되돌릴 수 없습니다. 생성기를 여러 번 재사용해야 하는 경우 이는 문제가 될 수 있습니다.생성기를 재사용하는 전략 ...
    프로그램 작성 2024-11-06에 게시됨
  • JavaScript 개발자를 위한 최고의 S 코드 확장
    JavaScript 개발자를 위한 최고의 S 코드 확장
    JavaScript는 빠르게 발전하고 있으며 이를 둘러싼 도구 생태계도 마찬가지입니다. 개발자로서 귀하는 작업 흐름을 최대한 효율적이고 원활하게 만들고 싶어합니다. 이것이 Visual Studio Code(VS Code)가 들어오는 곳입니다. 저는 JavaScript ...
    프로그램 작성 2024-11-06에 게시됨
  • 계산 결과를 표시하기 위해 HTML 출력 태그를 사용하는 방법.
    계산 결과를 표시하기 위해 HTML 출력 태그를 사용하는 방법.
    돌아온 것을 환영합니다! 모두가 주말을 즐겼기를 바랍니다. 오늘은 HTML 태그로 다시 돌아가 태그에 집중해 보겠습니다. 태그가 무엇인가요? 태그는 계산 결과를 표시하는 데 사용됩니다. 인라인 요소이며 , 또는 기타 인라인 요소 안에 배치할 수 있...
    프로그램 작성 2024-11-06에 게시됨
  • Java: 변수, 데이터 유형 및 입력/출력 이해
    Java: 변수, 데이터 유형 및 입력/출력 이해
    소개: Java는 세계에서 가장 인기 있고 다재다능한 프로그래밍 언어 중 하나이며 웹 애플리케이션부터 모바일 앱까지 모든 분야에서 사용됩니다. Java로의 여정을 시작하는 경우 기본 사항을 이해하는 것이 중요합니다. 이 가이드에서는 모든 Java 프로그...
    프로그램 작성 2024-11-06에 게시됨
  • 높이를 기준으로 Div의 종횡비를 어떻게 유지할 수 있습니까?
    높이를 기준으로 Div의 종횡비를 어떻게 유지할 수 있습니까?
    높이에 따른 Div의 가로 세로 비율 유지웹 디자인에서 요소의 가로 세로 비율을 제어하는 ​​것은 반응형 레이아웃에 중요합니다. 이 질문은 div의 너비를 높이의 백분율로 유지하여 높이 변경에 관계없이 요소의 모양이 일관되게 유지되도록 하는 방법을 탐구합니다.기존 접근...
    프로그램 작성 2024-11-06에 게시됨
  • Flet에서 DatePicker 처리
    Flet에서 DatePicker 처리
    플렛이 DatePicker를 구현하도록 요청하는 프로젝트의 최종 버전입니다. Veamos el ejemplo que proporciona la documentación oficial de Flet. import datetime import flet as ft def m...
    프로그램 작성 2024-11-06에 게시됨
  • 원형 SVG 마스크에 맞게 이미지 크기를 조정하는 방법은 무엇입니까?
    원형 SVG 마스크에 맞게 이미지 크기를 조정하는 방법은 무엇입니까?
    원형 SVG 경로에 맞게 이미지 크기 조정SVG 경로를 사용하여 이미지에서 원형 부분을 자르려고 할 때 중요합니다. 올바른 정렬을 보장합니다. 이미지가 잘 맞지 않으면 SVG 마스크의 잘못된 크기 또는 위치 지정이 원인일 수 있습니다.원하는 결과를 얻기 위한 대체 접근...
    프로그램 작성 2024-11-06에 게시됨
  • 기술 면접 질문 - 파트 Typescript
    기술 면접 질문 - 파트 Typescript
    Introduction Hello, hello!! :D Hope you’re all doing well! How we’re really feeling: I’m back with the second part of this series. ? In this...
    프로그램 작성 2024-11-06에 게시됨

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3