2017-06-12 57 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