У меня есть страница с различными элементами SVG, которые реагируют при их зависании. При зависании элемент увеличивается по размеру, покрывая соседние элементы. Моя проблема в том, что некоторые из соседей были сделаны позже и не будут покрыты. [Example]Рисование элемента SVG сверху с плавными переходами
Я попытался исправить проблему, используя appendChild()
при наведении курсора на последний элемент, но это устраняет эффект плавного перехода, который я устанавливаю с помощью CSS.
Пример:
for (var i = 0; i < 20; i++) {
for (var n = 0; n < 5; n++) {
var new_rect = document.getElementById("0").cloneNode(true);
new_rect.setAttributeNS(null, "cx", i * 20 + 10);
new_rect.setAttributeNS(null, "cy", n * 20 + 10);
new_rect.setAttributeNS(null, "id", i + n);
document.getElementById("mainG").appendChild(new_rect);
}
}
function expand(evt) {
//evt.target.parentNode.appendChild(evt.target);
evt.target.setAttributeNS(null, "r", "25");
}
function shrink(evt) {
evt.target.setAttributeNS(null, "r", "10");
}
.circle {
fill: hsl(100, 30%, 80%);
-webkit-transition: .1s ease-in-out;
}
.circle:hover {
fill: hsl(0, 50%, 70%);
}
<svg version="1.1" baseProfile="full" width="440" height="150" xmlns="http://www.w3.org/2000/svg">
<g id="mainG">
<circle id="0" cx="10" cy="10" r="10" stroke="none" fill="white" class="circle" onmouseover="expand(evt)" onmouseout="shrink(evt)"></circle>
</g>
<g id="cloneG"></g>
</svg>
Как я могу получить как элемент, который можно сделать на вершине, все еще имея плавные переходы между состояниями?
Спасибо, он отлично работает! Я довольно новичок в этом, не могли бы вы рассказать мне, что происходит? Зачем мне нужно переплавить? – Sean
Хороший вопрос, и я не совсем уверен, я просто догадывался, что это может помочь, поскольку у вас есть 2 события (css может кэшировать изменения для оптимизации), css-зависание и вызов функции, и я предполагал, что перекраска элементов будет Помогите. Чтобы получить дальнейшее понимание, вам может потребоваться задать еще один вопрос, и, возможно, один из экспертов svg/css в браузере сможет уточнить. Вы также можете найти, что это зависит от каждого браузера, поэтому я бы проводил некоторые тесты с каждым. – Ian
Хорошо, я вижу, спасибо! – Sean