私の目標は、いくつかの画像をdiv内の水平方向の中央に表示し、さらにラッパー内の水平方向の中央に表示することです。これは可能ですが、画像に対してjQueryの「バウンス」効果を呼び出すと、画像は左揃えになります。
私は何年もの間いじくり回していて、彼らが跳ねている間、彼らを中心にとどまらせることができません。
http://jsfiddle.net/vX3gz/2でチェックしてください
Win7で最新のFirefoxを使用しています。
私の目標は、いくつかの画像をdiv内の水平方向の中央に表示し、さらにラッパー内の水平方向の中央に表示することです。これは可能ですが、画像に対してjQueryの「バウンス」効果を呼び出すと、画像は左揃えになります。
私は何年もの間いじくり回していて、彼らが跳ねている間、彼らを中心にとどまらせることができません。
http://jsfiddle.net/vX3gz/2でチェックしてください
Win7で最新のFirefoxを使用しています。
画像が左に「ジャンプ」している理由は、バウンスがdiv
設定されたインライン スタイルを持ついくつかの要素を追加しているためmargin: 0
です。
したがって、非常に簡単な回避策は、独自の CSS でこれをオーバーライドすることです。
#thin > div {
margin: 0 auto !important;
}
通常、私は使用に反対しています!important
が、インライン スタイルをオーバーライドするために使用しているので、許容できると思います。
私はそれを解決したと思います。私が(CSSで)気に入っている方法ではなく、おそらく少しやり過ぎですが、それでも機能します。問題は確かに左マージンであり、中央に配置したい可変コンテンツを処理するときに、実際には左マージンを設定したくありません。また、Safari(Windows用)にも同じ問題があることに気づきました。
ここで動作することを確認してください:http://jsfiddle.net/c_kick/tuu4Q/
したがって、私が行ったことは、バウンスする要素を渡すカスタムBounceMe()関数を作成することです。内容:
また、要素に「バウンス」フラグを設定して、関数がすでにバウンスしているものをバウンスしないようにします。
重要なすべての要素を取得する必要があります
position: relative;
または、オフセット計算がオフになります。
jQuery:
var userAgent = navigator.userAgent.toLowerCase();
$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());//to prevent Chrome from being detected as safari
function BounceMe($this) {
if($.browser.mozilla || $.browser.safari && !$.browser.chrome){
if (!$this.data('bouncing')) {
$this.each(function(){ //run on each img
$pos = $(this).position(); // get position of image
$(this).css({marginLeft: $pos.left}); //'hard' set the margin left
});
$this.data('bouncing', true).effect("bounce", function(){
$this.css({marginLeft: 'auto'}) //reset the margin left after animation
.data('bouncing', false);
});
} else {
//images are still animating, do nothing
}
} else {
//no Firefox or Safari? No problem, do a regular bounce.
$this.stop().effect("bounce");
}
}
$(document).ready(function() {
BounceMe($("img")); //bounce on pageload
$("#bounce").click(function() {
BounceMe($("img")); //bounce on click on link
});
});
関数を.extend()に書き換えて、通常のBounce()のようにチェーンできるようにすることができます。