웹사이트를 더욱 멋지게 만들기 위해 화면 보기에서 마우스를 움직일 때마다 커서 주변이 빛나는 방사형 그라데이션을 구현하기로 결정했습니다. 다음 구현은 TypeScript로 빌드된 Vue.js 프로젝트에 적용됩니다.
이 결과를 얻기 위해 단순화를 위해 장치 감지용 라이브러리도 사용하고 싶습니다. 제가 선택한 것은 정확히 2.0.0 버전인 ua-parser-js입니다.
두 번째 산호 단계는 그라데이션 구성 요소를 생성하는 것입니다. 이 구성 요소는 그라데이션이 빛날 영역이 되기 때문에 모든 뷰의 주요 컨테이너여야 합니다.
// src/components/Gradient.vue <script lang="ts"> import { computed, ref, onMounted, onUnmounted } from 'vue' import { isMobile } from '../utils/device' export default { name: 'GradientView', setup() { const getViewCentrePosition = () => ({ x: window.innerWidth / 2, y: window.innerHeight / 2 }) const cursorPositionRef = ref(getViewCentrePosition()) const updateCursorPosition = (event: MouseEvent) => { if (!isMobile()) { cursorPositionRef.value = { x: event.clientX, y: event.clientY } } } onMounted(() => { if (!isMobile()) { window.addEventListener('mousemove', updateCursorPosition) } }) onUnmounted(() => { if (!isMobile()) { window.removeEventListener('mousemove', updateCursorPosition) } }) const gradientPosition = computed(() => { return `${cursorPositionRef.value.x}px ${cursorPositionRef.value.y}px` }) return { gradientPosition } }, data() { return { isMobileClass: isMobile() } } } </script> <template> <div :class="{ 'gradient--desktop': !isMobileClass, gradient: true }" :style="{ '--gradient-position': gradientPosition }"> <slot></slot> </div> </template> <style scoped lang="scss"> div { .gradient.gradient--desktop { background-image: radial-gradient( circle at var(--gradient-position, 50% 50%), var(--tertiary-color), var(--secondary-color) 20% ); width: 100vw; height: 100vh; overflow: scroll; @media (prefers-color-scheme: dark) { background-image: radial-gradient( circle at var(--gradient-position, 50% 50%), var(--tertiary-color), var(--primary-color) 20% ); } } } </style>
코드를 이해해 봅시다. 스크립트 섹션에는 초기 위치, 즉 화면 보기의 중심을 반환하는 함수가 있습니다. 예를 들어 숨겨진 위치 또는 첫 번째 마우스 트리거 후 애니메이션과 함께 나타날 수 있는 왼쪽 상단 위치 등 다르게 처리될 수 있습니다. 구현 선택입니다. 단순화를 위해 뷰 중앙에 추가합니다.
const getViewCentrePosition = () => ({ x: window.innerWidth / 2, y: window.innerHeight / 2 })
그런 다음 마우스 이벤트를 통해 발생하는 커서 마우스 움직임을 추적하는 데 사용할 개체에 대한 반응적 참조를 만듭니다.
const cursorPositionRef = ref(getViewCentrePosition())
그런 다음 커서가 마우스를 움직일 때마다 반응 참조 객체를 업데이트하는 기능을 구현합니다.
const updateCursorPosition = (event: MouseEvent) => { if (!isMobile()) { cursorPositionRef.value = { x: event.clientX, y: event.clientY } } }
이 기능은 마우스 이벤트와 연결되어야 합니다.
onMounted(() => { if (!isMobile()) { window.addEventListener('mousemove', updateCursorPosition) } }) onUnmounted(() => { if (!isMobile()) { window.removeEventListener('mousemove', updateCursorPosition) } })
마지막으로 요소 자체의 CSS에 제공될 그래디언트 위치의 반응 값을 계산합니다.
const gradientPosition = computed(() => { return `${cursorPositionRef.value.x}px ${cursorPositionRef.value.y}px` })
위에 설명된 대부분의 부분에서는 불필요한 계산을 피하기 위해 감지된 장치가 모바일에 있는지 확인합니다.
그런 다음 템플릿에서 콘텐츠의 전체 페이지 래퍼 역할을 하는 그래디언트의 HTML을 생성하고 필요한 경우에만 상대 CSS도 적용합니다.
<template> <div :class="{ 'gradient--desktop': !isMobileClass, gradient: true }" :style="{ '--gradient-position': gradientPosition }"> <slot></slot> </div> </template>
그리고 이것이 CSS입니다. 나는 여기에서 밝은 테마와 어두운 테마를 구현하는 웹 사이트에 대한 솔루션을 제공하고 전환을 위해 두 가지 색상을 사용합니다. 외부 부분에는 --primary-color 및 --secondary-color 색상을 사용하고 내부 부분은 두 테마 모두 --tertiary-color로 설정합니다. 하지만 선택과 튜닝은 귀하의 몫입니다.
<style scoped lang="scss"> .gradient.gradient--desktop { background-image: radial-gradient( circle at var(--gradient-position, 50% 50%), var(--tertiary-color), var(--secondary-color) 20% ); width: 100vw; height: 100vh; overflow: scroll; @media (prefers-color-scheme: dark) { background-image: radial-gradient( circle at var(--gradient-position, 50% 50%), var(--tertiary-color), var(--primary-color) 20% ); } } </style>
마침내 앞서 언급한 대로 장치를 감지하는 데 이 유틸리티가 사용되는 유일한 유틸리티입니다.
// src/utils/device.ts import { UAParser } from 'ua-parser-js' export const isMobile = (): boolean => { const uap = new UAParser() return uap.getDevice().type === 'mobile' }
더 나은 아이디어가 있나요? 듣고 싶습니다.
위 내용은 Vue.js 페이지 배경의 마우스 커서 주위에 방사형 그래디언트를 추가하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

최근에 색상에 대한 도구, 기사 및 리소스가 많이있었습니다. 당신의 즐거움을 위해 여기에 반올림하여 몇 개의 탭을 닫을 수 있습니다.

Robin은 이전에 이것을 다루었지만 지난 몇 주 동안 그것에 대해 약간의 혼란을 듣고 다른 사람이 설명하는 데 찌르는 것을 보았습니다.

나는 샌드위치 사이트의 디자인을 절대적으로 좋아합니다. 많은 아름다운 특징 중에는 무지개가있는이 헤드 라인이 스크롤 할 때 움직이는 밑줄이 있습니다. 그것은 아닙니다

많은 인기있는 이력서 디자인은 그리드 모양으로 섹션을 배치하여 사용 가능한 페이지 공간을 최대한 활용하고 있습니다. CSS 그리드를 사용하여 레이아웃을 만듭니다

페이지 새로 고침은 일입니다. 때로는 반응이 없다고 생각하거나 새로운 콘텐츠를 사용할 수 있다고 생각할 때 페이지를 새로 고침합니다. 때때로 우리는 단지 화가났습니다

React 세계에서 프론트 엔드 애플리케이션을 구성하는 방법에 대한 지침은 거의 없습니다. (“옳은 느낌”이 될 때까지 파일을 움직여도 롤). 진실

대부분의 경우 사용자가 응용 프로그램에 적극적으로 참여하거나 일시적으로 비활성화되어 있는지에 대해 신경 쓰지 않습니다. 비활성, 의미, 아마도 그들

Wufoo는 항상 통합으로 훌륭했습니다. 캠페인 모니터, MailChimp 및 Typekit과 같은 특정 앱과 통합이 있지만


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
