スタックオーバーフローで1000レピュテーションに達すると、消耗品のユーザーカードを取得します
カードにマウスを合わせると。
この効果を再現するにはどうすればよいですか?それはどのように呼ばれますか?私の推測では、それはJqueryメソッドですが、それが可能であれば、私がそれを探したので誰かが私を正しい方向に向けることができますが、私が必要とするものを正確に得ることができません。
スタックオーバーフローで1000レピュテーションに達すると、消耗品のユーザーカードを取得します
カードにマウスを合わせると。
この効果を再現するにはどうすればよいですか?それはどのように呼ばれますか?私の推測では、それはJqueryメソッドですが、それが可能であれば、私がそれを探したので誰かが私を正しい方向に向けることができますが、私が必要とするものを正確に得ることができません。
あなたが求めているものの本当に簡単な例はここにありますhttp://jsfiddle.net/RjpLt/
始めるには十分です。
アップデート
今ccsアニメーションで:http://jsfiddle.net/RjpLt/1/
これが彼らが使用しているものかどうかはわかりませんが、CSS3トランジションアニメーションは単純で、プログラミングの方法はありません。
一言で言えば:
ポップアップがトリガーされる<div>
と、適切なコンテンツを含むaがDOM内のどこかに動的に追加されます(ほとんどの場合、Javascriptはポップアップを配置し、作成します)。この要素は最初は小さく、次に最終的な寸法にアニメーション化されます。一方、CSSルールはポップアップの外観を指定します。マウスがポップアップ領域を離れると、<div>
がDOMから削除され、ポップアップが消えます。
静止画をポーズしたので、何が起こっているのか正確にわかりません。これが私の推測です:
Hoverを使用してイベントをトリガーします:http: //api.jquery.com/hover/
次に、表示して非表示のdivを表示します:http: //api.jquery.com/show/
何かのようなもの:
$('a.show-profile').hover(function(){
$('#profile').show();
});
#profileは、css "display:none"または$('#profile')。hide();を使用して事前に非表示にする必要があります。 http://api.jquery.com/hide/
私はそれがjQueryを使用していると確信しています、そして私はそれが「アニメート」であると確信しています:
http://api.jquery.com/animate/
アニメーション化されたスタイリングは、おそらくサイズと背景色、およびその領域で発生している他のことです。
簡単だと思います$('#container).show('slow');
私の推測は(ソースから):
StackExchange.helpers.MagicPopup({selector:".user-hover .user-gravatar48, .user-hover .user-gravatar32"
$(b).closest(".user-hover").find(".user-details a").attr("href"));return!b?null:"/users/user-info/"+b[1]},cache:!0,id:"user-menu",showing:f,removed:c}))}}}();
b.fadeOutAndRemove()):setTimeout(p,500)};b.animate({width:j,height:a,top:f.top+k.top},200,p);
しかし、私が言ったように、私はこれに慣れていないので、それは関連していないかもしれませんが、それはAnimated onmouseover on the gravatar
です。
私は2つのソリューションを作成しました:
display:none
CSSで使用している不要なコンテンツ、段落、または要素を削除しますdisplay:block;
すべてのコンテンツに準備します。ホバー時:
.show(600)
それを表示するために使用します。.hide()
jQuery:
$('body').append('<div id="userCard"><div id="userCardContent"></div>');
var $hoveredImg;
$('.userCardMini').on('mouseenter','img',function(e){
$hoveredImg = $(this);
var thisSrc = $hoveredImg.attr('src').split('s=')[0];
var posX = $hoveredImg.offset().left-10;
var posY = $hoveredImg.offset().top-10;
$('#userCardContent').html( $hoveredImg.parent().html() );
$('#userCardContent').find('img').attr('src', thisSrc+'s=64&d=identicon&r=PG');
var t = setTimeout(function() {
$('#userCard').css({left:posX, top:posY}).show(600);
}, 200);
$hoveredImg.data('timeout', t);
}).on('mouseleave',function(){
clearTimeout($hoveredImg.data('timeout'));
});
$('#userCard').mouseleave(function(){
$(this).stop(1,1).hide();
});
HTML:
<div class="userCardMini" data-user="383904"></div>
<div class="userCardMini" data-user="1063093"></div>
CSS:
.badge{
width:6px;
height:6px;
border-radius:10px;
font-size:11px;
display:inline-block;
margin:2px;
}
.gold{background:gold;}
.silver{background:silver;}
.bronze{background:#cc9966;}
.userCardMini{
width:200px;
height:32px;
/*background:#eee;*/
margin:4px;
clear:both;
}
a{color:#27f;}
img.userImg{
cursor:pointer;
float:left;
margin-right:10px;
box-shadow:1px 1px 3px -1px #999;
}
.userDetails, .userLocation{display:none;}
/* user card - BIG ONE */
#userCard{
position:absolute;
top:0;
left:0;
width:280px;
box-shadow:1px 1px 3px -1px #999;
border-radius:3px;
background:#666;
color:#eee;
display:none;
}
#userCardContent{
width:260px;
margin:10px;
}
#userCardContent a{color:#fff;}
#userCard .userDetails,
#userCard .userLocation{
display:block;
margin-bottom:4px;
}
もう1つの解決策(私が最も気に入っている)
は、DIV要素のCSSとz-indexを操作することです。つまり、親にカーソルを合わせると、コンテンツ(子)要素を下からアニメーション化します。
jQueryのこのビット:
var $desc;
$('.userCard').hover(function(){
$desc = $(this).find('.description');
$(this).css({zIndex:'3'});
var t = setTimeout(function() {
$desc.show('slow');
}, 150);
$(this).data('timeout', t);
},function(){
$(this).css({zIndex:0});
clearTimeout($(this).data('timeout'));
$desc.hide();
});
HTML:
<div class="userCard">
<div class="initial">
<img src="http://placehold.it/26x26/f7b" /><h2>User name 1</h2>
</div>
<div class="description">
<div class="description_content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
In et neque quam, vel dapibus neque. Praesent rutrum ultricies sodales.
</div>
</div>
</div>
CSS:
.userCard{
position:relative;
padding:10px;
width:200px;
margin:10px;
}
.initial{
position:relative;
cursor:pointer;
z-index:2;
}
.userCard img{
float:left;
margin-right:10px;
box-shadow: 1px 1px 3px -1px #999;
}
.description{
background:#eee;
position:absolute;
top:0px;
left:0px;
padding:10px;
clear:both;
display:none;
}
.description_content{
padding-top:37px;
position:relative;
width:200px;
}