forked from magento/magento2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfloating-header.js
91 lines (85 loc) · 2.96 KB
/
floating-header.js
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
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE_AFL.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
*/
/*jshint browser:true jquery:true */
(function($) {
"use strict";
$.widget('mage.floatingHeader', {
options: {
placeholderAttrs: {
'class': 'page-actions-placeholder'
},
fixedClass: 'fixed',
title: '.page-title .title'
},
/**
* Widget initialization
* @private
*/
_create: function() {
var title = $(this.options.title).text();
this._setVars();
this._bind();
this.element.find('script').remove();
this.element.wrapInner($('<div/>', {'class': 'page-actions-buttons'}));
this.element.wrapInner($('<div/>', {'class': 'page-actions-inner', 'data-title': title}));
},
/**
* Set privat variables on load, for performance purposes
* @private
*/
_setVars: function() {
this._placeholder = this.element.before($('<div/>', this.options.placeholderAttrs)).prev();
this._offsetTop = this._placeholder.offset().top;
this._height = this.element.outerHeight(true);
},
/**
* Event binding, will monitor scroll and resize events (resize events left for backward compat)
* @private
*/
_bind: function() {
this._on(window, {
scroll: this._handlePageScroll,
resize: this._handlePageScroll
});
},
/**
* Event handler for setting fixed positioning
* @event
* @private
*/
_handlePageScroll: function() {
var isActive = ($(window).scrollTop() > this._offsetTop);
this.element
[isActive ? 'addClass': 'removeClass'](this.options.fixedClass);
this._placeholder.height(isActive ? this._height: '');
},
/**
* Widget destroy functionality
* @private
*/
_destroy: function() {
this._placeholder.remove();
this._off($(window));
}
});
})(jQuery);