javascript - 旋转动画悬停但在悬停时移动鼠标 ->取消

标签 javascript jquery html css svg

我正在尝试在我的网站上触发 SVG 中的旋转动画。它绝对有效,但问题是当我将鼠标悬停在取消动画的元素上时移动鼠标。

所以我包含一个对象 svg 元素:

<object type="image/svg+xml" data="branching4.svg" id="branching">
    Your browser does not support SVG
</object> 

这是一个很长的 SVG 文档,但这里附有样式表:

#rectangle1, #rectangle2, #rectangle3{
    perspective: 1500px;
}
#rectangle1.flip .card, #rectangle2.flip .card, #rectangle3.flip .card {
    transform: rotateX(180deg);
}
#rectangle1 .card, #rectangle2 .card, #rectangle3 .card{
    transform-style:preserve-3d;
    transition:1s;
}
#rectangle1 .face, #rectangle2 .face, #rectangle3 .face{
    backface-visibility: hidden;
}
#rectangle1 #front1{
    transform: rotateX(0deg);
}
#rectangle1 #back1{
    transform: rotateX( 180deg );
}
#rectangle2 #front2{
    transform: rotateX(0deg);
}
#rectangle2 #back2{
    transform: rotateX( 180deg );
}
#rectangle3 #front3{
    transform: rotateX(0deg);
}
#rectangle3 #back3{
    transform: rotateX( 180deg );
}
#rectangle1.flipped, #rectangle2.flipped, #rectangle3.flipped {
    transform: rotateX( 180deg );
}

可以在jsfiddle中看到svg结构

最后是脚本:

window.onload=function() {
    var svgDoc = $("#branching")[0].contentDocument; // Get the document object for the SVG
    $(".st4", svgDoc).css("font-family", "robotolight,Helvetica Neue,Helvetica,Arial,sans-serif");
    $("#rectangle1", svgDoc).hover(function(){
        $(this, svgDoc).toggleClass("flip");
    });
    $("#rectangle2", svgDoc).hover(function(){
        $(this, svgDoc).toggleClass("flip");
    });
    $("#rectangle3", svgDoc).hover(function(){
        $(this, svgDoc).toggleClass("flip");
    });

};

我也试过 CSS,也是同样的问题。

这是一个 jsfiddle:

https://jsfiddle.net/7f7wjvvt/

第一个问题:

如何在元素上移动鼠标时实现流畅的旋转过渡?

第二个问题:

我怎样才能让 Y 旋转保持在原地而不是向左移动?在 fiddle 中尝试

第三个问题:

为什么 jsfiddle 在 firefox 中能很好地显示 svg 而在 chrome 中却不行? 此外,透视在 chrome 中似乎不起作用......为什么?

有什么想法吗?

最佳答案

不幸的是,我认为您遇到的许多问题仅仅是由于浏览器对 svg 元素上的 (3D) css 转换支持不佳造成的。

移动卡片 <g>元素自己<svg>普通里面<div> ,并将交互性应用到 div 元素将使事情变得容易得多。

.card {
  display: inline-block;
  transform-origin: center;
  perspective: 1000px;
  background: grey;
}
.card-inner {
  width: 100px;
  height: 200px;
  transition: transform .4s;
}
.card-inner:hover,
.card:hover > .card-inner {
  transform: rotateY(180deg);
}
<div class="card">
  <div class="card-inner" style="background: yellow">
    Add svg card here
  </div>
</div>

<div class="card">
  <div class="card-inner" style="background: blue">
    Add svg card here
  </div>
</div>

<div class="card">
  <div class="card-inner" style="background: green">
    Add svg card here
  </div>
</div>

How can i have a fluid rotate transition when moving the mouse on the element ?

卡片旋转后,很容易失去悬停。不过,悬停状态应用于底层元素。如果您确定这是卡片的父级,则可以使用此 css 规则进行样式设置:

.card-inner:hover,
.card:hover > .card-inner {
  transform: rotateY(180deg);
}

How can i have a Y rotation that stay on the spot and not translate to the left ? Try it in the fiddle

你必须使用 transform-origin ,就像你试过的那样。它不适用于 svg元素...

transform-origin: center;

Why the jsfiddle display the svg well in firefox and not in chrome? Also, perspective doesn't seem to work in chrome ... WHY ?

就像我说的,它只是没有得到正确的支持......

关于javascript - 旋转动画悬停但在悬停时移动鼠标 ->取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075538/

相关文章:

javascript - 我应该在哪里存储每个用户的 UI 配置

javascript - 没有数据时如何隐藏标签?

javascript - 触发textarea ctrl-z 撤消缓冲区更新

javascript - 如果其他字段有值(value),则创建必填字段

jquery - 为什么我的页面比 <html> 元素高?

javascript - 下拉 jquery 范围值

javascript - Jquery 日期选择器函数

javascript - jQuery get() 方法如何支持灵活的参数索引?

javascript - 如何停止谷歌地图上的移动标记?

空表单字段的 JavaScript 值