PageSourceSearch

https://educationlinkhouse.com/scrolling/jquery.newstape.js

js educationlinkhouse.com collected 2026-10-04 06:57:17 UTC 4,112 bytes, 135 lines download raw bytes

1if (typeof Object.create !== "function") {
2    Object.create = function(obj) {
3        function F() {
4        }
5        F.prototype = obj;
6        return new F();
7    };
8}
9
10(function($, window, document) {
11    var Newstape = {
12        $elem: null,
13        $content: null,
14        options: {},
15        height: 0,
16        contentHeight: 0,
17        dragstartPos: 0,
18        dragDeltaY: 0,
19        dragDeltaYReduce: 0,
20        timer: null,
21        pos: 0,
22        init: function(options, el) {
23            var base = this;
24
25            base.$elem = $(el);
26            base.$content = $('.newstape-content', base.$elem);
27
28            base.options = $.extend({}, $.fn.newstape.options, base.$elem.data(), options);
29
30            var heightRefresh = function() {
31                base.height = base.$elem.outerHeight();
32                base.contentHeight = base.$content.outerHeight();
33            };
34 
35            if (base.options.heightSpy) {
36                setInterval(heightRefresh, 1000);
37            }
38
39            heightRefresh();
40
41            var play = function() {
42                base.timer = setInterval(function() {
43                    base.move();
44                }, base.options.period);
45            };
46
47            base.$elem.bind('mouseover.newstape', function() {
48                clearInterval(base.timer);
49            });
50
51            base.$elem.bind('mouseout.newstape', function() {
52                play();
53            });
54
55            if (base.options.mousewheel) {
56                base.$elem.bind('mousewheel.newstape', function(e) {
57                    e.preventDefault();
58                    base.pos = (e.deltaY > 0) ? base.pos + base.options.mousewheelRate : base.pos - base.options.mousewheelRate;
59                    base.move();
60                });
61            }
62
63            $('a', base.$elem).focus(function(e) {
64                base.$elem.scrollTop(0);
65                base.pos = base.height - $(this).position().top - $(this).outerHeight();
66                base.move();
67            });
68
69            if (base.options.dragable) {
70                base.$elem.bind('dragstart.newstape', function(e, dd) {
71                    base.dragDeltaY = 0;
72                    base.dragDeltaYReduce = 0;
73                    base.dragstartPos = base.pos;
74                    base.$elem.addClass('newstape-drag');
75                }).bind('drag.newstape', function(e, dd) {
76                    base.dragDeltaY = dd.deltaY;
77                    base.pos = base.dragstartPos + (dd.deltaY - base.dragDeltaYReduce);
78                    base.move();
79                }).bind('dragend.newstape', function(e, dd) {
80                    base.$elem.removeClass('newstape-drag');
81                });
82            }
83
84            play();
85        },
86        move: function() {
87            var base = this;
88
89            var dragUpdate = function() {
90                base.dragstartPos = base.pos;
91                base.dragDeltaYReduce = base.dragDeltaY;
92                base.dragDeltaY = 0;
93            };
94
95            if (base.pos <= base.contentHeight * -1) {
96                base.pos = base.height;
97                dragUpdate();
98            }
99
100            if (base.pos >= base.height + base.options.offset) {
101                base.pos = base.contentHeight * -1;
102                dragUpdate();
103            }
104
105            if (!base.$elem.hasClass('newstape-drag')) {
106                base.pos = base.pos - base.options.offset;
107            }
108
109            base.$content.css('top', parseInt(base.pos) + 'px');
110        }
111    };
112
113    $.fn.newstape = function(options) {
114        return this.each(function() {
115            if ($(this).data("newstape-init") === true) {
116                return false;
117            }
118
119            $(this).data("newstape-init", true);
120            var newstape = Object.create(Newstape);
121            newstape.init(options, this);
122            $.data(this, "newstape", newstape);
123        });
124    };
125
126    $.fn.newstape.options = {
127        period: 30,
128        offset: 1,
129        mousewheel: true,
130        dragable: true,
131        mousewheelRate: 30,
132        heightSpy: true
133    };
134
135}(jQuery, window, document));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.