scrollfix

JQuery辅助文本框在浏览器中固定位置,不随浏览器滚动条滚动

Stan na 20-08-2019. Zobacz najnowsza wersja.

Ten skrypt nie powinien być instalowany bezpośrednio. Jest to biblioteka dla innych skyptów do włączenia dyrektywą meta // @require https://update.greasyfork.org/scripts/388372/726657/scrollfix.js

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

// ==UserScript==
// @name         scrollfix
// @version      0.0.1
// @namespace    tsharp.js
// @description  JQuery辅助文本框在浏览器中固定位置,不随浏览器滚动条滚动
// @author       jimbo
// @license      GPLv3
// @match        *
// @icon         none
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==
 ; (function ($) {
        jQuery.fn.scrollFix = function (height, dir) {
            height = height || 0;
            height = height == "top" ? 0 : height;
            return this.each(function () {
                if (height == "bottom") {
                    height = document.documentElement.clientHeight - this.scrollHeight;
                } else if (height < 0) {
                    height = document.documentElement.clientHeight - this.scrollHeight + height;
                }
                var that = $(this),
                    oldHeight = false,
                    p, r, l = that.offset().left;
                dir = dir == "bottom" ? dir : "top"; //默认滚动方向向下
                if (window.XMLHttpRequest) { //非ie6用fixed
                    function getHeight() { //>=0表示上面的滚动高度大于等于目标高度
                        return (document.documentElement.scrollTop || document.body.scrollTop) + height - that.offset().top;
                    }
                    $(window).scroll(function () {
                        if (oldHeight === false) {
                            if ((getHeight() >= 0 && dir == "top") || (getHeight() <= 0 && dir == "bottom")) {
                                oldHeight = that.offset().top - height;
                                that.css({
                                    position: "fixed",
                                    top: height,
                                    left: l
                                });
                            }
                        } else {
                            if (dir == "top" && (document.documentElement.scrollTop || document.body.scrollTop) < oldHeight) {
                                that.css({
                                    position: "fixed"
                                });
                                oldHeight = false;
                            } else if (dir == "bottom" && (document.documentElement.scrollTop || document.body.scrollTop) > oldHeight) {
                                that.css({
                                    position: "fixed"
                                });
                                oldHeight = false;
                            }
                        }
                    });
                } else { //for ie6
                    $(window).scroll(function () {
                        if (oldHeight === false) { //恢复前只执行一次,减少reflow
                            if ((getHeight() >= 0 && dir == "top") || (getHeight() <= 0 && dir == "bottom")) {
                                oldHeight = that.offset().top - height;
                                r = document.createElement("span");
                                p = that[0].parentNode;
                                p.replaceChild(r, that[0]);
                                document.body.appendChild(that[0]);
                                that[0].style.position = "absolute";
                            }
                        } else if ((dir == "top" && (document.documentElement.scrollTop || document.body.scrollTop) < oldHeight) || (dir == "bottom" && (document.documentElement.scrollTop || document.body.scrollTop) > oldHeight)) { //结束
                            that[0].style.position = "absolute";
                            p.replaceChild(that[0], r);
                            r = null;
                            oldHeight = false;
                        } else { //滚动
                            that.css({
                                left: l,
                                top: height + document.documentElement.scrollTop
                            })
                        }
                    });
                }
            });
        };
    })(jQuery);