어떻게: 커서 추적 뷰
15668 단어 tutorialcssjavascriptbeginners
나는 기술 명칭을 모른다.커서 추적 시차를 봅시다.
좋은 소식은 이 기술은 너무 많은 시간을 들여 제작할 필요가 없고, 당신의 디자인에 약간의 추가적인 것을 추가할 수 있다는 것이다.기억해라, 이것은 작은 세부 사항이다.
익살스런 표정을 짓자!우리는 몇몇 표기부터 시작할 것이다.
<div class="face">
<div class="face__eyes">
<div class="eye eye--left"></div>
<div class="eye eye--right"></div>
</div>
<div class="face__mouth"></div>
</div>
우리는 이미 그것을 다 설계했다💅Remember, you can view the compiled HTML, CSS, and JavaScript in CodePen. Use the dropdown for a source panel and press "View Compiled HTML/CSS/JavaScript".
그 얼굴이 아주 좋아요.하지만 우리가 조금만 생명을 줄 수 있다면 더 멋있을 거야.
이를 위해 CSS 변수를 "pointermove"이벤트 탐지기와 함께 사용할 수 있습니다.
document.addEventListener('pointermove', () => {
// Make those features move by updating some CSS variables.
})
하지만 이 기능들의 이동을 제한하고 싶습니다.우리는 그들이 여기저기 마구 날게 하고 싶지 않다.우리는 미묘함을 원한다.눈 컨테이너를 업데이트하는 CSS부터 시작하겠습니다.그게 중요해.우리는 모든 눈을 옮길 필요가 없다.역할 영역 CSS 변수는
transform
에 사용됩니다..face__eyes {
transform: translate(calc(var(--x, 0) * 1px), calc(var(--y, 0) * 1px));
}
calc
및 1px
값을 사용하는 방법에 주의하십시오.일부 CSS 변수를 변경하지 않는 것은 나쁜 습관이 아닙니다.이것은 우리에게 서로 다른 단원을 쉽게 바꿀 수 있는 공간을 주었다.하지만 아직 변하지 않았다.
--x
와 --y
의 값은 0
로 떨어진다.하지만 이 시연을 통해 업데이트치가 눈에 어떻게 영향을 미치는지 볼 수 있다.지금그 대본들은요?커서 위치를 정의된 범위에 비추고 값을 출력하는 함수가 필요합니다.
이를 위해, 우리는 맵 함수를 만들 수 있다.
const mapRange = (inputLower, inputUpper, outputLower, outputUpper) => {
const INPUT_RANGE = inputUpper - inputLower
const OUTPUT_RANGE = outputUpper - outputLower
return value => outputLower + (((value - inputLower) / INPUT_RANGE) * OUTPUT_RANGE || 0)
}
우리의 매핑 함수는 입력 범위와 출력 범위를 받아들인다.그리고 함수를 되돌려줍니다. 우리는 그것을 사용하여 한 값을 다른 값에 비출 수 있습니다.거기서 무슨 일이 일어났는지 봅시다.우리는 입력과 출력의 두 범위를 함수에 전달할 것이다.계산 범위 후에 우리는 함수를 되돌려줍니다.함수는 신기한 작용을 발휘했다.
50 => 500 + (((50 - 0) / 100) * 500))
50 => 500 + (0.5 * 500)
50 => 500 + 250
50 => 750
우리는 그것을 우리의 CSS 변수 전환과 연결시켜야 한다. 우리는 해냈다.다음은 우리가 우리의 눈을 어떻게 연결하는지 x번역입니다.const BOUNDS = 20
const update = ({ x, y }) => {
const POS_X = mapRange(0, window.innerWidth, -BOUNDS, BOUNDS)(x)
EYES.style.setProperty('--x', POS_X)
}
document.addEventListener('pointermove', update)
이 정도면 됐어!나머지는 다른 축과 기능을 연결하는 것이다.우리가 어떻게 우리가 사용하는 경계를 성명하는지 주의해라.Y축에 대해 우리는
window.innerHeight
를 입력으로 사용하고 같은 절차를 따른다.그런데 입은?이것이 바로 작용역 CSS 변수의 위력이다.
eyes 용기에 스타일을 설정하는 것보다 face 요소 자체에 스타일을 설정하는 것이 좋습니다.
const FACE = document.querySelector('.face')
const update = ({ x, y }) => {
const POS_X = mapRange(0, window.innerWidth, -BOUNDS, BOUNDS)(x)
const POS_Y = mapRange(0, window.innerHeight, -BOUNDS, BOUNDS)(y)
FACE.style.setProperty('--x', POS_X)
FACE.style.setProperty('--y', POS_Y)
}
이런 변화를 하다won't break anything.이것이 CSS 변수의 역할 영역입니다.변수 값은 여전히 눈 용기에 등급을 연결합니다.하지만 이제 입에도 통로가 생겨서 우리는 그것을 똑같이 바꿀 수 있다.시작점translateX
은 다른 번역을 하기 전에 입을 가운데 놓는 데 쓰인다..face__mouth {
transform: translateX(-50%) translate(calc(var(--x, 0) * 1px), calc(var(--y, 0) * 1px));
}
지금 입도 움직였어!그러나 그것은 보기에 틀렸다.그것은 약간 불편함을 느끼는 눈과 함께 움직인다.이것은 언급할 만한 세부 사항을 중시하는 일 중의 하나다.예를 들어 만약에 우리 얼굴에 귀가 있고 눈이 위로 올라가면 귀는 어디로 갑니까?엎드려!거울로 보아라, 나는 너를 평가하지 않을 것이다.나는'디테일'을 위해 이상한 일을 한 적이 있다😅
그러면 우리는 어떻게 이 문제를 해결해야 합니까?내가 처음에 사용
calc
과 무단위치를 언급한 것을 기억하십니까?이제 쓸모가 생겼다.JavaScript와 CSS는 관심사를 분리하는 방식으로 구현되었습니다.잘 됐다!JavaScript에서 커서 매핑 범위를 계산하여 CSS에 전달합니다.그것은 우리가 거기에서 무엇을 하든 상관하지 않는다.사실상'경계'는 아주 좋은 정수일 수 있다. 예를 들어
100
우리는 CSS에서 우리가 하고 싶은 일을 할 수 있다.사람의 얼굴의 각 특징은 자신의 변환을 처리한다.현재 그것들은 모두 계수
1px
를 사용한다..face__eyes {
transform: translate(calc(var(--x, 0) * 1px), calc(var(--y, 0) * 1px));
}
.face__mouth {
transform: translateX(-50%) translate(calc(var(--x, 0) * 1px), calc(var(--y, 0) * 1px));
}
그런데 우리가 입을 계수-1px
로 바꾸면 어떨까?.face__mouth {
transform: translateX(-50%) translate(calc(var(--x, 0) * -1px), calc(var(--y, 0) * -1px));
}
이제 입은 눈과 반대 방향으로 움직인다.하지만 CSS의 계수만 바꾸면 됩니다.이것은 범위가 제한된 CSS 변수를 사용하지만 그것들의 통일성을 유지하는 초능력 중의 하나이다.우리는 하나의 변수로 장면에 전기를 공급할 수 있으며, 동시에 좋은 관심사 분리를 유지할 수 있다.
CSS 변수를 사용하는 커서 추적면이 있습니다.
얼굴에 끼지만, 너는 그것만 쓸 필요가 없다.너는 그것으로 많은 일을 할 수 있다.또 다른 '괜찮은 촉감' 은 시각차 같은 아이콘 배경을 만드는 것이다.팁은 CSS 변수로 업데이트
background-position
하는 것입니다.나는 이 시연에서 이런 효과를 사용했다.이것은 주요 사건이 아니다.하지만 조금만 더 넣으면 돼요.
⚠️ 이 프레젠테이션에는 오디오가 포함되어 있다⚠️
이것은 아이콘 배경의 독립된 버전입니다.비결은 당신이 좋아하는 아이콘으로 타일을 만들고 그 위에 기대는 것이다
background-repeat
.이 프레젠테이션에서 계수를 설정할 수 있습니다.이것은 우리가 관심사를 분리하고 CSS가 가치를 이용하여 하고 싶은 일을 하도록 하고 있다는 사실에 근거한 것이다.
이렇게!
이것은 JavaScript와 한정된 범위의 CSS 변수를 사용하여 커서 추적 시차를 실현하는 방법입니다.나는 네가 이 기술로 무엇을 했는지 보고 매우 기뻤다.당신은 또 어떤 행동을 취할 수 있습니까?여느 때와 마찬가지로, 너는 어떻게 생각하느냐, 다음에 너를 볼 것이다.
모든 코드는 이것CodePen Collection에서 찾을 수 있습니다.
잘 유지하고 있어!ʕ •ᴥ•ʔ
Reference
이 문제에 관하여(어떻게: 커서 추적 뷰), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jh3y/how-to-cursor-tracking-parallax-52cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)