1
0
Fork 0
mirror of https://github.com/yunluo/gdk.git synced 2024-06-13 11:12:23 +02:00
gdk/assets/js/Posfixed.js

86 lines
3.6 KiB
JavaScript

/*!
* jQuery plugin gapples v1.0
* posfixed
* http://gapples.sinaapp.com/
*
* Copyright 2013 gapples.sinaapp.com
* Released under the GPLv2 license
* http://gapples.sinaapp.com/license
*
* Written by Boyn Xiong
* Date: 2013-1-3
*/
(function ($) {
$.extend($.fn, {
posfixed: function (configSettings) {
var settings = {
direction: "top",
type: "while",
hide: false,
distance: 0
};
$.extend(settings, configSettings);
var obj = this;
var initPos = $(obj).offset().top;
var anchoredPos = settings.distance;
if (settings.type == "while") {
$(window).scroll(function (event) {
if (settings.direction == "top") {
var objTop = $(obj).offset().top - $(window).scrollTop();
if (objTop <= anchoredPos) {
$(obj).css("position", "fixed");
$(obj).css(settings.direction, anchoredPos + "px");
}
if ($(obj).offset().top <= initPos) {
$(obj).css("position", "static");
}
} else {
var objBottom = $(window).height() - $(obj).offset().top + $(window).scrollTop() - $(obj).outerHeight();
if (objBottom <= anchoredPos) {
$(obj).css("position", "fixed");
$(obj).css(settings.direction, anchoredPos + "px");
}
if ($(obj).offset().top >= initPos) {
$(obj).css("position", "static");
}
}
});
}
if (settings.type == "always") {
if (settings.hide) {
$(obj).hide();
}
$(window).scroll(function (event) {
if ($(window).scrollTop() > 300) {
$(obj).fadeIn(200);
} else {
$(obj).fadeOut(200);
}
});
$(obj).css("position", "fixed");
$(obj).css(settings.direction, anchoredPos + "px");
if (settings.tag != null) {
if (settings.tag.obj != null) {
if (settings.tag.direction == "right") {
$(obj).css("left", (settings.tag.obj.offset().left + settings.tag.obj.width() + settings.tag.distance) + "px");
$(window).resize(function () {
$(obj).css("left", (settings.obj.tag.offset().left + settings.tag.obj.width() + settings.tag.distance) + "px");
});
} else {
console.log(settings.tag.obj.offset().left - settings.tag.obj.width() - settings.tag.distance);
$(obj).css("left", (settings.tag.obj.offset().left - $(obj).outerWidth() - settings.tag.distance) + "px");
$(window).resize(function () {
$(obj).css("left", (settings.tag.obj.offset().left - $(obj).outerWidth() - settings.tag.distance) + "px");
});
}
} else {
$(obj).css(settings.tag.direction, settings.tag.distance + "px");
}
}
}
}
});
})(jQuery);