summaryrefslogtreecommitdiff
path: root/www/external/ionic.headerShrink.js
blob: 70f9a1d266fa3bd84d87402727d9835c82e2c7ed (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
angular.module('ionic.ion.headerShrink', [])

    .directive('headerShrink', function ($document) {
    var fadeAmt;

    var shrink = function (header, content, amt, max) {
        amt = Math.min(max, amt);
        fadeAmt = 1 - amt / max;
        ionic.requestAnimationFrame(function () {
            header.style[ionic.CSS.TRANSFORM] = 'translate3d(0, -' + amt + 'px, 0)';
            for (var i = 0, j = header.children.length; i < j; i++) {
                header.children[i].style.opacity = fadeAmt;
            }
        });
    };

    return {
        restrict: 'A',
        link: function ($scope, $element, $attr) {
            var starty = $scope.$eval($attr.headerShrink) || 0;
            var shrinkAmt;

            var amt;

            var y = 0;
            var prevY = 0;
            var scrollDelay = 0.4;

            var fadeAmt;

            var headers = $document[0].body.querySelectorAll('.bar-header');
            var headerHeight = headers[0].offsetHeight;

            function onScroll(e) {
                var scrollTop = e.detail.scrollTop;

                if (scrollTop >= 0) {
                    y = Math.min(headerHeight / scrollDelay, Math.max(0, y + scrollTop - prevY));
                } else {
                    y = 0;
                }
                //console.log(scrollTop);

                ionic.requestAnimationFrame(function () {
                    fadeAmt = 1 - (y / headerHeight);
                    for (var k = 0, l = headers.length; k < l; k++) {
                        headers[k].style[ionic.CSS.TRANSFORM] = 'translate3d(0, ' + -y + 'px, 0)';
                        headers[k].style.opacity = fadeAmt;
                    }
                });

                prevY = scrollTop;
            }

            $element.bind('scroll', onScroll);
        }
    }
})

angular.module('app', ['ionic', 'ionic.ion.headerShrink'])
    .config(function ($stateProvider, $urlRouterProvider) {

    // Define our views
    $stateProvider.state('home', {
        url: "/home",
        templateUrl: 'views/home.html'
        // If you wanted some AngularJS controller behaviour...
        // controller: "HomeCtrl as ctrl"
    });

    // Default view to show
    $urlRouterProvider.otherwise('/home');
});