#animation #svg #interaction
#Анимация #svg #взаимодействие
Вопрос:
ниже я создаю простую скрипку с анимацией svg:
<svg width="250" height="250" viewbox="0 0 20 20">
<line x1="10" y1="0" x2="10" y2="10"style="stroke:rgb(255,0,0); stroke-width:1">
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 10 10" to="360 10 10" dur="7.5s" repeatCount="indefinite" />
</line>
<circle cx="5" cy="5" r="1" style="fill:rgb(0,255,0);"/>
<circle cx="15" cy="15" r="1" style="fill:rgb(0,0,255);"/>
</svg>
Мой вопрос: есть ли способ, которым я могу сделать выпуклость синей и красной точек (например, изменить их цвет) при наведении на них красной строки?
Спасибо
Ответ №1:
Это мое решение: я создаю маску с линией. Есть 2 дополнительных круга ( fill:gold
), которые замаскированы линией.
Я помещаю анимированную строку внутри a <g stroke="red">
, потому что я хочу, чтобы используемая строка была белой.
svg{border:1px solid;}
<svg width="250" height="250" viewbox="0 0 20 20">
<circle cx="5" cy="5" r="1" style="fill:rgb(0,255,0);" />
<circle cx="15" cy="15" r="1" style="fill:rgb(0,0,255);"/>
<mask id="mask">
<use xlink:href="#L" style="stroke:white"/>
</mask>
<g stroke="red">
<line id="L" x1="10" y1="0" x2="10" y2="10" >
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 10 10" to="360 10 10" dur="7.5s" repeatCount="indefinite" />
</line>
</g>
<g style="fill:gold;mask: url(#mask)">
<circle cx="5" cy="5" r="1" />
<circle cx="15" cy="15" r="1"/>
</g>
</svg>
Комментарии:
1. Сегодня мы ответили на разные вопросы : =)
2. ага … svg-маска. спасибо, я попробую как можно скорее. Я предполагаю, что я могу применить и другие изменения — например, изменить размер круга или прозрачность? Какой-то эффект радара.
3. и еще один дополнительный вопрос: считаете ли вы, что эффект маски может быть растянут во времени? Значение — наведение курсора красной линии, наложение маски, наведение курсора красной линии, удаление маски через 1 секунду? Мне так жаль, что я сейчас разговариваю по телефону, не могу дождаться, чтобы попробовать ваше решение.
4. Мне нужно было бы понять, почему вам нужно ее удалить.
5. Для сохранения визуального внимания. Моя цель — добиться чего-то вроде радарного изображения, где оно имеет аналогичный эффект. Пользователь должен видеть «след» от объекта, через который прошла красная линия, еще 1-2 секунды