Javascript 将鼠标悬停在外部html元素上,在svg内缩放组
我一直在尝试在SVG中的组元素上添加一个简单的缩放效果。通过将鼠标悬停在列表项上,SVG中的组元素应该放大,但是,这样做时,它将失去在元素中的位置,因为它正在使用translate 关于如何解决这个问题或我应该如何处理这个问题的任何想法 列表标记如下所示:Javascript 将鼠标悬停在外部html元素上,在svg内缩放组,javascript,css,svg,Javascript,Css,Svg,我一直在尝试在SVG中的组元素上添加一个简单的缩放效果。通过将鼠标悬停在列表项上,SVG中的组元素应该放大,但是,这样做时,它将失去在元素中的位置,因为它正在使用translate 关于如何解决这个问题或我应该如何处理这个问题的任何想法 列表标记如下所示: li.active { color: red; } .round { transition: transform .3 ease; } .round.active { transform: scale(1.3) } <
li.active {
color: red;
}
.round {
transition: transform .3 ease;
}
.round.active {
transform: scale(1.3)
}
<ul class="list">
<li data-number="round1">round 1</li>
<li data-number="round1-copy">round 2</li>
</ul>
竖起了小提琴
非常感谢您的帮助:)好吧,像您使用的那样使用内联
变换和缩放来实现这一点并不容易
但是基于对getComputedStyle()
和trasnform
的解释,
您可以删除使用CSS类的想法,并使用元素计算样式,从中获取元素当前的转换
值(使用getComputedStyle()
然后使用正则表达式获取矩阵的每个值
)
获取上述值后,修改scaleX和scaleY值(这些值是矩阵数组的索引0和3),然后将修改后的矩阵设置回元素,查看:
$(函数(){
$('.list>li')。在('mouseover',function()上{
var dataNumber=$(this.data('number');
$(this.addClass('active');
设roundElem=$('#'+dataNumber)[0];
调整变换(roundElem,1.3)
});
$('.list>li')。在('mouseleave',function()上{
$(this.removeClass('active');
var dataNumber=$(this.data('number');
设roundElem=$('#'+dataNumber)[0];
调整变换(roundElem,1)
});
功能调整变换(元素、比例){
让trans=getComputedStyle(elem).transform;
numberPattern=/-?\d+\.?\d+\d+/g;
v=传输匹配(数字模式);
让newMatrix=“矩阵(“+scale+”、“+v[1]+”、“+v[2]+”、“+scale+”、“+v[4]+”、“+v[5]+”)
elem.style.transform=newMatrix
}
});代码>
li.active{
颜色:红色;
}
.轮{
转型:转型。3缓解;
}
第1轮
第二轮
广场
用草图创建。
1.
2.
好吧,像您现在使用的那样,使用内联变换和缩放来实现这一点并不容易
但是基于对getComputedStyle()
和trasnform
的解释,
您可以删除使用CSS类的想法,并使用元素计算样式,从中获取元素当前的转换
值(使用getComputedStyle()
然后使用正则表达式获取矩阵的每个值
)
获取上述值后,修改scaleX和scaleY值(这些值是矩阵数组的索引0和3),然后将修改后的矩阵设置回元素,查看:
$(函数(){
$('.list>li')。在('mouseover',function()上{
var dataNumber=$(this.data('number');
$(this.addClass('active');
设roundElem=$('#'+dataNumber)[0];
调整变换(roundElem,1.3)
});
$('.list>li')。在('mouseleave',function()上{
$(this.removeClass('active');
var dataNumber=$(this.data('number');
设roundElem=$('#'+dataNumber)[0];
调整变换(roundElem,1)
});
功能调整变换(元素、比例){
让trans=getComputedStyle(elem).transform;
numberPattern=/-?\d+\.?\d+\d+/g;
v=传输匹配(数字模式);
让newMatrix=“矩阵(“+scale+”、“+v[1]+”、“+v[2]+”、“+scale+”、“+v[4]+”、“+v[5]+”)
elem.style.transform=newMatrix
}
});代码>
li.active{
颜色:红色;
}
.轮{
转型:转型。3缓解;
}
第1轮
第二轮
广场
用草图创建。
1.
2.
您只需添加另一个g
元素并保留初始代码即可。您还可以简化它,因为您不需要切换li
类。考虑<代码>:悬停< /代码>代替
$(函数(){
$('.list>li')。在('mouseover',function()上{
var_this=$(this),
dataNumber=_this.data('number');
$('#'+dataNumber).addClass('活动')
});
$('.list>li')。在('mouseleave',function()上{
$('g.active').removeClass('active'))
});
});代码>
li:悬停{
颜色:红色;
}
g{
转变:转变。3s轻松;
变换原点:中心;
变换框:填充框;
}
g、 活跃的{
转换:比例(1.3);
}
第1轮
第二轮
广场
用草图创建。
1.
2.
您可以使用sim卡
$('.list > li').on('mouseover', function() {
var _this = $(this),
dataNumber = _this.data('number');
_this.addClass('active');
$('#' + dataNumber).addClass('active')
});
$('.list > li').on('mouseleave', function() {
$(this).removeClass('active');
$('.round.active').removeClass('active')
});