Переходя непосредственно к теме, мышь следует, как следует из названия, элемент будет следовать за движением мыши и совершать соответствующие движения. Что-то вроде этого:
Вообще говоря, CSS отвечает за представление, а JavaScript — за поведение. Эффект следования мышью — это поведение, и для его достижения обычно требуется JS.
Конечно, в этой статье основное внимание уделяется тому, как использовать CSS для имитации некоторых эффектов анимации поведения мыши без JS.
принцип
Взяв приведенную выше демонстрацию в качестве примера, чтобы использовать CSS для реализации следования мыши, наиболее важным моментом является:
Как отслеживать, где находится текущая мышь в режиме реального времени?
Хорошо, на самом деле, многие эффекты CSS неотделимы отс завязанными глазамиДва слова. Чтобы отслеживать, где в данный момент находится мышь, нам просто нужно заполнить страницу элементами:
Мы используем 100 элементов, чтобы покрыть всю страницу.При наведении отображается цвет.Основной код SCSS выглядит следующим образом:
<div class="g-container">
<div class="position"></div>
<div class="position"></div>
<div class="position"></div>
<div class="position"></div>
... // 100个
</div>
.g-container {
position: relative;
width: 100vw;
height: 100vh;
}
.position {
position: absolute;
width: 10vw;
height: 10vh;
}
@for $i from 0 through 100 {
$x: $i % 10;
$y: ($i - $x) / 10;
.position:nth-child(#{$i + 1}) {
top: #{$y * 10}vh;
left: #{$x * 10}vw;
}
.position:nth-child(#{$i + 1}):hover {
background: rgba(255, 155, 10, .5)
}
}
Вы можете получить этот эффект:
Хорошо, если удалить эффект наведения каждого элемента, то работа со страницей в это время фактически не будет иметь никакого эффекта. Но в то же время по:hover
Псевдокласс, мы можем примерно знать, в каком интервале на странице находится текущая мышь.
Хорошо, давайте добавим на страницу еще один элемент (круглый шар) и расположим его абсолютно посередине страницы:
<div class="g-ball"></div>
.ball {
position: absolute;
top: 50%;
left: 50%;
width: 10vmax;
height: 10vmax;
border-radius: 50%;
transform: translate(-50%, -50%);
}
Наконец, мы используем~
Селектор родственных элементов при наведении курсора на страницу (фактически сотня скрытых элементов div при наведении курсора) управляет положением шарообразного элемента через элемент div, над которым в данный момент находится курсор.
@for $i from 0 through 100{
$x: $i % 10;
$y: ($i - $x) / 10;
.position:nth-child(#{$i + 1}):hover ~ .ball {
top: #{$y * 10}vh;
left: #{$x * 10}vw;
}
}
Таким образом, простая мышь с чистым CSS для достижения эффекта достигается, чтобы облегчить понимание, взгляните на эту диаграмму ниже, чтобы понять:
Полная ДЕМО, вы можете нажать здесь, чтобы увидеть:Демонстрация CodePen — CSS реализует следование мыши
существующие проблемы
Что касается приведенной выше демонстрации, в ней все еще много недостатков, таких как
плохая точность
Вы можете контролировать только перемещение элемента в пространство, где находится div, а не точное положение мыши, для этого мы можем оптимизировать, увеличив количество скрытых div. Например, чтобы увеличить количество элементов div со 100 до 1000.
Движение не достаточно гладко
Эффект выглядит недостаточно плавным, и его, возможно, потребуется оптимизировать с помощью разумной функции плавности и соответствующей задержки анимации.
высохнуть
Эм. Принцип освоен, давайте посмотрим, какие интересные эффекты можно повозить с помощью этой техники.
CSS эффект следования мыши за кнопкой
Сначала я увидел следующий эффект на CodePen, используяSVG + CSS + JS
Чтобы реализовать, я подумал, используя только CSS, я могу скопировать его:
CodePen Demo -- Gooey mouse follow
Ну в идеале очень пухлые, в реальности очень худенькие. При использовании только CSS все еще есть много ограничений.
- Но мы все еще можем использовать метод, описанный выше, чтобы добиться следования за мышью.
- Используйте фильтры CSS
filter: blur() contrast()
Подробности о моделировании слияния элементов см. в этой статье:Хитрости и детали CSS-фильтров, о которых вы не знали
Хорошо, вот взгляните на сломанную версию симуляции, использующую только CSS:
Это слишком странно, вы можете немного сблизить эффект и получить немного лучший похожий эффект, настроив цвет и силу фильтра (то есть различные попытки...):
Демонстрация poke me, CodePen Demo -- CSS-эффект кнопки следования мыши
Полноэкранная анимация следования мыши
Хорошо, давай, давайте сделаем что-нибудь более ослепительное. Ну, это такая яркая штука. :пот_улыбка:
Если мы контролируем не один элемент, а несколько элементов. Затем для эффектов анимации между несколькими элементами устанавливается разное значение transition-delay, и движение последовательно задерживается. Ничего себе, это заставляет меня волноваться, чтобы думать об этом. Например:
Демонстрация CodePen — анимация следования мыши PURE CSS MAGIC MIX
Если бы мы могли быть более изобретательными, то мы могли бы столкнуться с немного большим количеством искр:
Этот эффект — работа Юсуке Накая, японского автора CodePen, который мне очень нравится, исходный код:Demo -- Only CSS: Water Surface
мышь следовать указаниям
Конечно, нет необходимости указывать движение элемента. Техника использования div для заполнения страницы для захвата текущего положения элемента также может использоваться для других эффектов, таких как указание движения мыши:
- Div по умолчанию с полным фоном
transition-duration: 0.5s
- При наведении курсора на фоновый элемент div измените текущее наведение на div
transition-duration: 0s
, и задайте цвет фона при наведении, чтобы сразу отображался div, на который прибывает текущее наведение - Когда мышь покидает div, div
transition-duration
вернуться к состоянию по умолчанию, котороеtransition-duration: 0.5s
, и цвет фона одновременно исчезает, поэтому цвет фона оставшегося элемента div будет медленно переходить в прозрачный, что приведет к эффекту призрака.
CodePen Demo -- cancle transition
наконец
На самом деле, есть много интересных вариантов использования, желающие студенты могут сделать это сами, а еще попробовать и комбинировать.
Меня часто спрашивают, можно ли использовать эти странные обычаи в реальном бизнесе? Это полезно или нет. Что ж, мое мнение таково, что, возможно, это действительно не используется в бизнесе или сценарии применения крайне ограничены, но если вы знаете больше, вы можете делать больше выборов, когда сталкиваетесь с проблемами, иметь больше пространства для размышлений и иметь лучшее дивергентное мышление, по крайней мере Безобидный.
Более интересный CSS, о котором вы, возможно, даже не подозревали, вы можете посмотреть здесь:
CSS-вдохновение -- CSS-вдохновение
Другие замечательные технические статьи по CSS собраны в моемGithub -- iCSS, продолжайте обновлять, добро пожаловать, нажмите звездочку, чтобы подписаться на коллекцию.
Ну вот и конец этой статьи, надеюсь она вам поможет :)
Если у вас есть какие-либо вопросы или предложения, вы можете общаться больше.Оригинальные статьи ограничены в написании и знаниях.Если в статье есть какие-либо неточности, пожалуйста, дайте мне знать.