これは、これまでで最も汚い 5 分間の例です。
CSS と HTML はほとんど問題にならないので省略しますが、動く要素が必要position:absolute;
であり、first container with a position:anything will be the offset() container we use
.
//log each x,y coordniate into an array
var theCoords = [];
$.each($('.price'), function(i,obj){
theCoords.push({
'ele' : $(obj),
'top' : $(obj).offset().top,
'left' : $(obj).offset().left});
});
上記では、スナップしたい要素に関するいくつかの情報を配列にプッシュしています。「ele」のパラメーター内にリテラル要素参照を格納します。
$(window).on('scroll', function(){
$.each(theCoords, function(i, arr){
if($(window).scrollTop() > arr.top - 75){
$('#addToCart').css({
'top': arr.top
});
$('#addToCart').prop('rel', arr.ele);
}
});
});
上記では、window scorll イベントをキャプチャし、ページがスクロールするたびに各 Coords を反復処理します。いくつかの汚い数学を使用して、許容できるとわかった間隔で例の流れを作成しました。これは自由に変更してください。#addToCart
要素として使用しposition:absolute
、配列に対してウィンドウの位置を評価するたびに、配列に最も近い一致に基づいて「トップ」を移動します。また、'price' オブジェクトへの参照をカートの 'rel' プロパティにプッシュします。
$('#addToCart').click(function(){
console.log($($(this).prop('rel')).text());
});
ここをクリックすると、スナップ先の div のテキストが表示されます。
うまくいけば、これで正しい方向に進むことができます。