_top: 0px
_と_right: 0px
_に絶対配置されたdivがあり、jqueryの.animate()
を使用して、現在の位置から_left: 0px
_にアニメーション化します。これをどのように行うのですか?私はこれを機能させることができないようです:
_$("#coolDiv").animate({"left":"0px"}, "slow");
_
なぜこれが機能しないのか、私が探していることをどのように達成するのですか?
ありがとう!!
動作しない理由は、right
の位置が設定されているが、left
が設定されていないことに関係していると思います。
left
を手動で現在の位置に設定すると、次のようになります:
var left = $('#coolDiv').offset().left; // Get the calculated left position
$("#coolDiv").css({left:left}) // Set the left to its calculated position
.animate({"left":"0px"}, "slow");
編集:
Firefoxは、計算されたleft
の位置がピクセル単位の正しい値として利用できるため、Firefoxが期待どおりに動作するように見えますが、Webkitベースのブラウザ、および明らかにIEは左の位置にauto
の値を返します。
auto
はアニメーションの開始位置ではないため、アニメーションは事実上0から0まで実行されます。見るのはあまり面白くないです。 :o)
上記のようにアニメーションの前に左の位置を手動で設定すると、問題が修正されます。
変数でランドスケープを散らかしたくない場合は、変数の必要性を取り除く同じものの素敵なバージョンがあります:
$("#coolDiv").css('left', function(){ return $(this).offset().left; })
.animate({"left":"0px"}, "slow");
これは私のために働いた
$("div").css({"left":"2000px"}).animate({"left":"0px"}, "slow");
動作例を示す最小限の答えを次に示します。
<html>
<head>
<title>hello.world.animate()</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
type="text/javascript"></script>
<style type="text/css">
#coolDiv {
position: absolute;
top: 0;
right: 0;
width: 200px;
background-color: #ccc;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
// this way works fine for Firefox, but
// Chrome and Safari can't do it.
$("#coolDiv").animate({'left':0}, "slow");
// So basically if you *start* with a right position
// then stick to animating to another right position
// to do that, get the window width minus the width of your div:
$("#coolDiv").animate({'right':($('body').innerWidth()-$('#coolDiv').width())}, 'slow');
// sorry that's so ugly!
});
</script>
</head>
<body>
<div style="" id="coolDiv">HELLO</div>
</body>
</html>
元の答え:
あなたが持っている:
$("#coolDiv").animate({"left":"0px", "slow");
修正済み:
$("#coolDiv").animate({"left":"0px"}, "slow");
ドキュメント: http://api.jquery.com/animate/
アニメーション化する子要素の幅がわかっている場合は、マージンオフセットを使用してアニメーション化することもできます。たとえば、これはleft:0からright:0までアニメーション化します
CSS:
.parent{
width:100%;
position:relative;
}
#itemToMove{
position:absolute;
width:150px;
right:100%;
margin-right:-150px;
}
Javascript:
$( "#itemToMove" ).animate({
"margin-right": "0",
"right": "0"
}, 1000 );
.animateメソッドは、要素に位置属性を指定した場合にのみ機能しますが、そうでない場合は移動しませんか?
たとえば、divを宣言してもcssで何も宣言しない場合、プロパティマージンを宣言しても、デフォルト位置を想定せず、ページに移動しません。