bklLiudl
2024-07-23 277bbae216debe7e6c04e8cc6ee6e1ba9763e14b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
    Breakpoints.js
    version 1.0
    
    Creates handy events for your responsive design breakpoints
    
    Copyright 2011 XOXCO, Inc
    http://xoxco.com/
 
    Documentation for this plugin lives here:
    http://xoxco.com/projects/code/breakpoints
    
    Licensed under the MIT license:
    http://www.opensource.org/licenses/mit-license.php
 
*/
(function($) {
 
    var lastSize = 0;
    var interval = null;
 
    $.fn.resetBreakpoints = function() {
        $(window).unbind('resize');
        if (interval) {
            clearInterval(interval);
        }
        lastSize = 0;
    };
    
    $.fn.setBreakpoints = function(settings) {
        var options = jQuery.extend({
                            distinct: true,
                            breakpoints: new Array(320,480,768,1024)
                        },settings);
 
 
        interval = setInterval(function() {
    
            var w = $(window).width();
            var done = false;
            
            for (var bp in options.breakpoints.sort(function(a,b) { return (b-a) })) {
            
                // fire onEnter when a browser expands into a new breakpoint
                // if in distinct mode, remove all other breakpoints first.
                if (!done && w >= options.breakpoints[bp] && lastSize < options.breakpoints[bp]) {
                    if (options.distinct) {
                        for (var x in options.breakpoints.sort(function(a,b) { return (b-a) })) {
                            if ($('body').hasClass('breakpoint-' + options.breakpoints[x])) {
                                $('body').removeClass('breakpoint-' + options.breakpoints[x]);
                                $(window).trigger('exitBreakpoint' + options.breakpoints[x]);
                            }
                        }
                        done = true;
                    }
                    $('body').addClass('breakpoint-' + options.breakpoints[bp]);
                    $(window).trigger('enterBreakpoint' + options.breakpoints[bp]);
 
                }                
 
                // fire onExit when browser contracts out of a larger breakpoint
                if (w < options.breakpoints[bp] && lastSize >= options.breakpoints[bp]) {
                    $('body').removeClass('breakpoint-' + options.breakpoints[bp]);
                    $(window).trigger('exitBreakpoint' + options.breakpoints[bp]);
 
                }
                
                // if in distinct mode, fire onEnter when browser contracts into a smaller breakpoint
                if (
                    options.distinct && // only one breakpoint at a time
                    w >= options.breakpoints[bp] && // and we are in this one
                    w < options.breakpoints[bp-1] && // and smaller than the bigger one
                    lastSize > w && // and we contracted
                    lastSize >0 &&  // and this is not the first time
                    !$('body').hasClass('breakpoint-' + options.breakpoints[bp]) // and we aren't already in this breakpoint
                    ) {                    
                    $('body').addClass('breakpoint-' + options.breakpoints[bp]);
                    $(window).trigger('enterBreakpoint' + options.breakpoints[bp]);
 
                }                        
            }
            
            // set up for next call
            if (lastSize != w) {
                lastSize = w;
            }
        },250);
    };
    
})(jQuery);