Statistics
| Branch: | Revision:

blinker / firefox.plugin / data / lib / jquery.withinViewport.js @ master

History | View | Annotate | Download (3.404 KB)

1
/**
2
 * Within Viewport jQuery Plugin
3
 *
4
 * @description Companion plugin for withinViewport.js
5
 * @author      Craig Patik, http://patik.com/
6
 * @version     0.0.3
7
 * @date        2014-03-03
8
 */
9

    
10
(function($) {
11
    /**
12
     * $.withinViewport()
13
     * @description          jQuery method
14
     * @param  {Object}      [settings] optional settings
15
     * @return {Collection}  Contains all elements that were within the viewport
16
    */
17
    $.fn.withinViewport = function(settings) {
18
        if (typeof settings === "string") { settings = {sides: settings}; }
19

    
20
        var opts = $.extend({}, settings, {sides: "all"}), elems = [];
21

    
22
        this.each(function() {
23
            if (withinViewport(this, opts)) {
24
              elems.push(this);
25
            }
26
        });
27

    
28
        return $(elems);
29
    };
30

    
31
    // Main custom selector
32
    $.extend($.expr[":"], {
33
        "within-viewport": function(element) {
34
            return withinViewport(element, "all");
35
        }
36
    });
37

    
38
    /**
39
     * Optional enhancements and shortcuts
40
     *
41
     * @description Uncomment or comment these pieces as they apply to your project and coding preferences
42
     */
43

    
44
    // Shorthand jQuery methods
45
    //
46
    $.fn.withinViewportTop = function(settings) {
47
        var opts;
48

    
49
        if (typeof settings === "string") { settings = {sides: settings}; }
50

    
51
        opts = $.extend({}, settings, {sides: "top"}), elems = [];
52

    
53
        this.each(function() {
54
            if (withinViewport(this, opts)) {
55
                elems.push(this);
56
            }
57
        });
58

    
59
        return $(elems);
60
    };
61

    
62
    $.fn.withinViewportRight = function(settings) {
63
        var opts;
64

    
65
        if (typeof settings === "string") { settings = {sides: settings}; }
66

    
67
        opts = $.extend({}, settings, {sides: "right"}), elems = [];
68

    
69
        this.each(function() {
70
            if (withinViewport(this, opts)) {
71
              elems.push(this);
72
            }
73
        });
74

    
75
        return $(elems);
76
    };
77

    
78
    $.fn.withinViewportBottom = function(settings) {
79
        var opts;
80

    
81
        if (typeof settings === "string") { settings = {sides: settings}; }
82

    
83
        opts = $.extend({}, settings, {sides: "bottom"}), elems = [];
84

    
85
        this.each(function() {
86
            if (withinViewport(this, opts)) {
87
                elems.push(this);
88
            }
89
        });
90

    
91
        return $(elems);
92
    };
93

    
94
    $.fn.withinViewportLeft = function(settings) {
95
        var opts;
96

    
97
        if (typeof settings === "string") { settings = {sides: settings}; }
98

    
99
        opts = $.extend({}, settings, {sides: "left"}), elems = [];
100

    
101
        this.each(function() {
102
            if (withinViewport(this, opts)) {
103
                elems.push(this);
104
            }
105
        });
106

    
107
        return $(elems);
108
    };
109

    
110
    // Custom jQuery selectors
111
    $.extend($.expr[":"], {
112
        "within-viewport-top": function(element) {
113
            return withinViewport(element, "top");
114
        },
115
        "within-viewport-right": function(element) {
116
            return withinViewport(element, "right");
117
        },
118
        "within-viewport-bottom": function(element) {
119
            return withinViewport(element, "bottom");
120
        },
121
        "within-viewport-left": function(element) {
122
            return withinViewport(element, "left");
123
        }
124
        // Example custom selector:
125
        //,
126
        // "within-viewport-top-left-45": function(element) {
127
        //     return withinViewport(element, {sides:'top left', top: 45, left: 45});
128
        // }
129
    });
130
}(jQuery));