summaryrefslogtreecommitdiff
path: root/themes/extensions/jqt.floaty.js
blob: 2ae8f4d565989ee225addcdfb7288409b4675129 (plain)
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
91
92
/*

            _/    _/_/    _/_/_/_/_/                              _/       
               _/    _/      _/      _/_/    _/    _/    _/_/_/  _/_/_/    
          _/  _/  _/_/      _/    _/    _/  _/    _/  _/        _/    _/   
         _/  _/    _/      _/    _/    _/  _/    _/  _/        _/    _/    
        _/    _/_/  _/    _/      _/_/      _/_/_/    _/_/_/  _/    _/     
       _/                                                                  
    _/

    Created by David Kaneda <http://www.davidkaneda.com>
    Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/>
    
    Special thanks to Jonathan Stark <http://jonathanstark.com/>
    and pinch/zoom <http://www.pinchzoom.com/>
    
    (c) 2009 by jQTouch project members.
    See LICENSE.txt for license.

*/

(function($) {
    if ($.jQTouch)
    {
        $.jQTouch.addExtension(function Floaty(jQT){
            
            $.fn.makeFloaty = function(options){
                var defaults = {
                    align: 'top',
                    spacing: 20,
                    time: '.3s'
                }
                var settings = $.extend({}, defaults, options);
                settings.align = (settings.align == 'top') ? 'top' : 'bottom';
                
                return this.each(function(){
                    var $el = $(this);
                    
                    $el.css({
                        '-webkit-transition': 'top ' + settings.time + ' ease-in-out',
                        'display': 'block',
                        'min-height': '0 !important'
                    }).data('settings', settings);
                    
                    $(document).bind('scroll', function(){
                        if ($el.data('floatyVisible') === true)
                        {
                            $el.scrollFloaty();
                        }
                    });
                    $el.scrollFloaty();
                });
            }

            $.fn.scrollFloaty = function(){
                return this.each(function(){
                    var $el = $(this);
                    var settings = $el.data('settings');
                    var wHeight = $('html').attr('clientHeight'); // WRONG
                    
                    var newY = window.pageYOffset +
                        ((settings.align == 'top') ? 
                            settings.spacing : wHeight - settings.spacing - $el.get(0).offsetHeight);
                    
                    $el.css('top', newY).data('floatyVisible', true);
                });
            }

            $.fn.hideFloaty = function(){
                return this.each(function(){
                    var $el = $(this);
                    var oh = $el.get(0).offsetHeight;
                    
                    $el.css('top', -oh-10).data('floatyVisible', false);
                });
            }
            
            $.fn.toggleFloaty = function(){
                return this.each(function(){
                    var $el = $(this);
                    if ($el.data('floatyVisible') === true){
                        $el.hideFloaty();
                    }
                    else
                    {
                        $el.scrollFloaty();
                    }
                });
            }
        });
    }
})(jQuery);