の97行目stickysidebar.jquery.js
で、プラグインはスティッキーサイドバーのすべての親要素をループしています。コメントは次のように述べています。
配置する要素が見つかるまでツリーを上に移動します
そのループ内への呼び出しから取得する最初の要素.parent()
は、div「ラッパー」です。その後に。がbody
続きhtml
ます。最初に考慮する要素はではありません body-container-main
。
$this.parent()
79行目で呼び出されると、意図したコンテナdivを参照します。実際に起こっているのは、97行目のループが決して起こらないということです。つまり、3つの条件のいずれかがfalseである必要があります。$parent.css("position")
「静的」以外のものを作ることをお勧めします。stickybox multiのサンプルページでは、親divをposition:absolute
ととしてレイアウトしていposition:relative
ます。ショッピングカート/バスケットのparent()
divはposition:static
、ページ全体に固執するようになっています。
親divのposition
cssプロパティをに変更しますrelative
。
他の人に適用可能なコードのセクション:
// 'Line 75' of the plugin code here
var setPosition = function ($sb) {
if ($sb) {
var $this = $sb
, $parent = $this.parent() // **line 79**
, parentOffs = $parent.offset()
, currOff = $this.offset()
, data = $this.data("stickySB");
if (!data) {
data = {
offs: {} // our parents offset
, orig: { // cache for original css
top: $this.css("top")
, left: $this.css("left")
, position: $this.css("position")
, marginTop: $this.css("marginTop")
, marginLeft: $this.css("marginLeft")
, offset: $this.offset()
}
}
}
//go up the tree until we find an elem to position from
while (parentOffs && "top" in parentOffs // **line 97**
&& $parent.css("position") == "static") {
$parent = $parent.parent();
parentOffs = $parent.offset();
}
if (parentOffs) { // found a postioned ancestor
var padBtm = parseInt($parent.css("paddingBottom"));
padBtm = isNaN(padBtm) ? 0 : padBtm;
data.offs = parentOffs;
data.offs.bottom = settings.constrain ?
Math.abs(($parent.innerHeight() - padBtm) - $this.outerHeight()) :
$(document).height();
}
else data.offs = { // went to far set to doc
top: 0
, left: 0
, bottom: $(document).height()
};