2017-06-12 20 views
4

:)非常感谢您的时间伙计。:悬停旋转CSS保持位置发现

我在悬停时用CSS旋转了一个对象,并希望它在停止时保持它的新位置。我已经四处搜寻,但唯一能找到的是css :hover rotate element and keep the new position,这似乎超越了。

这个效果可能纯粹用CSS实现吗?一旦你停止盘旋,我想让图标保持在180的位置。

我用这个代码:

i.fa.fa-globe:hover { 
color: #e9204f; 
transition: 0.9s; 
transform: rotatey(180deg); 

}

而且它是一个字体真棒图标,如果这有什么差别。

编辑:

给大家在Stackoverflow上。谢谢。感谢您参加一个论坛,在这个论坛中,人们知道有初学者,而且我们不是因为我们一开始就不了解解释而不是混蛋或懒惰。你们真是太棒了,谢谢你,非常感谢你。

EDIT2 - 为大家简单的CSS解决其他需要它(从绅士采取谁帮助了评论):

.lovernehovermarket i.fa.fa-rocket { 
transform: rotate(0deg); 
transition: transform 999s; 

}

.lovernehovermarket:hover i.fa.fa-rocket { 
color: #e9204f; 
transition: 0.9s; 
transform: rotate(100deg); 

}

+0

如果你旋转360deg,是不是“新位置”一样的起始位置? –

+0

你好,非常感谢。对不起,这是一个不好的例子 - 一个完美的作品。我有三个图标,其中一个只能旋转180度,而当我移动悬停时,它会向上移动。所以我希望找到一个简单的方法,让它保持在180度的角度,一旦我移动鼠标。感谢您指出,得爱Stackoverflow。马上编辑。 – eMikkelsen

回答

0

使用动画,并在元素悬停时使用JS事件侦听器应用它(mouseover事件)。当元素盘旋了一日一次,删除事件监听器:

var rect = document.querySelector('.rectangle') 
 

 
function rotate() { 
 
    this.classList.add('rotate'); 
 
    
 
    rect.removeEventListener('mouseover', rotate); 
 
} 
 

 
rect.addEventListener('mouseover', rotate);
.rectangle { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: gold; 
 
} 
 

 
.rotate { 
 
    animation: rotate 0.5s linear; 
 
} 
 

 
@keyframes rotate { 
 
    from { 
 
    transform: rotate(0deg); 
 
    } 
 

 
    to { 
 
    transform: rotate(180deg); 
 
    } 
 
} 
 

 
body { 
 
    padding: 30px; 
 
}
<div class="rectangle"></div>

+0

你好! 非常感谢您的帮助。对此,我真的非常感激。我原来的帖子中有一个错字,我很抱歉。它不旋转360度。它旋转180度,我想为它取下悬停,保持在新的180度角。因此,图标以向上指向开始,然后当您将鼠标指向下方时。但是,一旦我移开悬停点,它就会再次向上指向。 – eMikkelsen

+0

@eMikkelsen看看我的答案,它将元素倒过来放在鼠标外面,不再第二次生成动画。 – Mauro

0

你还需要在你的元素经常CSS初始transform状态,以便它可以在两个之间变换定义的状态:

.rotate { 
 
    width: 20px; 
 
    height: 100px; 
 
    background: blue; 
 
    transition: 0.9s; 
 
    transform: rotate(0deg); 
 
} 
 

 
.rotate:hover { 
 
    transform: rotate(180deg); 
 
} 
 

 
body { 
 
    padding: 100px; 
 
}
<div class="rotate"></div>

0

如果要保持旋转状态,则可能必须使用一个小JQuery来检查转换何时结束并更改该类,以便在模糊时不会恢复为其原始状态。

这样div旋转一次,然后改变它的类以保持旋转状态。

$('.rotate').hover(function() { 
 
    $(this).addClass("animate"); 
 
    $(this).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', 
 
    function(e) { 
 

 
\t \t $(this).removeClass('rotate').addClass('rotated'); 
 

 
    }); 
 

 
});
.rotate { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: gold; 
 
    transition-property: transform; 
 
    transition-duration: 1.5s; 
 
    transition-timing-function: linear; 
 
} 
 

 
.animate { 
 
    animation: rotate 1s linear; 
 
    transform: rotate(180deg); 
 
    animation-play-state: running; 
 
} 
 
.rotated 
 
{ 
 
    width: 100px; 
 
    height: 100px; 
 
    background: gold; 
 
    transform: rotate(180deg); 
 
} 
 

 
body { 
 
    padding: 30px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="rotate">some text</div>

1

我想要一个纯CSS的解决方案,你可以设置一个跃迁时间回到基态相当高。

这不是永远,但它是非常接近对于大多数用户:

.test { 
 
    display: inline-block; 
 
    margin: 10px; 
 
    background-color: tomato; 
 
    transform: rotate(0deg); 
 
    transition: transform 999s 999s; 
 
} 
 
.test:hover { 
 
    transform: rotate(90deg); 
 
    transition: transform 0.5s; 
 
}
<div class="test">TEST</div>

+0

你好! 这正是我所期待的。这样一个简单的解决方案,它工作完美。先生,我真诚地感谢你的帮助。我真的这样做。我当然也把你连根拔起。 我可以问一下,这个CSS解决方案是否有缺点?我假设,因为每个人都坚持使用jQuery等等? :) 对不起占用你的时间。再次感谢你。万分感谢。 – eMikkelsen

+0

我编辑过它,增加了延迟,这样它就不会移动任何东西。我能想到的唯一不足就是,如果你快速停止,最初的移动将不会完成。可能有些人觉得这个“哈克”,它的帮助很高兴! – vals

+0

专业绅士的专业回复。再次非常感谢你,并再次作出回应,以解释你所做的事情和潜在的利弊。祝你有美好的一天。 – eMikkelsen