Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 79 additions & 6 deletions dist/slideout.js

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions index.css
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ body {
overflow-y: auto;
-webkit-overflow-scrolling: touch;
display: none;

}
.slideout-menu--move {
transform: translate(-100%,0);
z-index: 2;
}

.slideout-panel {
Expand Down
83 changes: 78 additions & 5 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ function inherits(child, uber) {
*/
function Slideout(options) {
options = options || {};
// Store the options
this._options = options;

// Sets default values
this._startOffsetX = 0;
Expand All @@ -69,6 +71,9 @@ function Slideout(options) {
if(this.panel.className.search('slideout-panel') === -1) { this.panel.className += ' slideout-panel'; }
if(this.menu.className.search('slideout-menu') === -1) { this.menu.className += ' slideout-menu'; }

if ((options.itemToMove == 'menu' || options.itemToMove == 'both') && this.menu.className.search('slideout-menu--move') === -1) {
this.menu.className += ' slideout-menu--move';
}

// Sets options
this._fx = options.fx || 'ease';
Expand Down Expand Up @@ -97,10 +102,16 @@ Slideout.prototype.open = function() {
this.emit('beforeopen');
if (html.className.search('slideout-open') === -1) { html.className += ' slideout-open'; }
this._setTransition();
self._recalculateAll();
this._translateXTo(this._translateTo);
this._opened = true;
setTimeout(function() {
self.panel.style.transition = self.panel.style['-webkit-transition'] = '';
if (self._options.itemToMove == "panel" || self._options.itemToMove == "both" || self._options.itemToMove == undefined) {
self.panel.style.transition = self.panel.style['-webkit-transition'] = '';
}
if (self._options.itemToMove == "menu" || self._options.itemToMove == "both") {
self.menu.style.transition = self.menu.style['-webkit-transition'] = '';
}
self.emit('open');
}, this._duration + 50);
return this;
Expand All @@ -120,7 +131,12 @@ Slideout.prototype.close = function() {
this._opened = false;
setTimeout(function() {
html.className = html.className.replace(/ slideout-open/, '');
self.panel.style.transition = self.panel.style['-webkit-transition'] = self.panel.style[prefix + 'transform'] = self.panel.style.transform = '';
if (self._options.itemToMove == "panel" || self._options.itemToMove == "both" || self._options.itemToMove == undefined) {
self.panel.style.transition = self.panel.style['-webkit-transition'] = self.panel.style[prefix + 'transform'] = self.panel.style.transform = '';
}
if (self._options.itemToMove == "menu" || self._options.itemToMove == "both") {
self.menu.style.transition = self.menu.style['-webkit-transition'] = self.menu.style[prefix + 'transform'] = self.menu.style.transform = '';
}
self.emit('close');
}, this._duration + 50);
return this;
Expand All @@ -140,20 +156,67 @@ Slideout.prototype.isOpen = function() {
return this._opened;
};

/**
* Recalculates the slide out
*/
Slideout.prototype._recalculateAll = function () {

//this._options.padding = this.menu.clientWidth;

// Sets default values
this._startOffsetX = 0;
this._currentOffsetX = 0;
this._opening = false;
this._moved = false;
this._opened = false;
this._preventOpen = false;
this._touch = this._options.touch === undefined ? true : this._options.touch && true;
this._menuTriggerWidth = this._options.menuTriggerWidth === undefined ? 70 : this._options.menuTriggerWidth;

// Sets panel
this.panel = this._options.panel;
this.menu = this._options.menu;

// Sets classnames
if (this.panel.className.search('slideout-panel') === -1) { this.panel.className += ' slideout-panel'; }
if (this.menu.className.search('slideout-menu') === -1) { this.menu.className += ' slideout-menu'; }


// Sets options
this._fx = this._options.fx || 'ease';
this._duration = parseInt(this._options.duration, 10) || 300;
this._tolerance = parseInt(this._options.tolerance, 10) || 70;
this._padding = this._translateTo = parseInt(this._options.padding, 10) || 256;
this._orientation = this._options.side === 'right' ? -1 : 1;
this._translateTo *= this._orientation;
}

/**
* Translates panel and updates currentOffset with a given X point
*/
Slideout.prototype._translateXTo = function(translateX) {
this._currentOffsetX = translateX;
this.panel.style[prefix + 'transform'] = this.panel.style.transform = 'translateX(' + translateX + 'px)';
if (this._options.itemToMove == "panel" || this._options.itemToMove == "both" || this._options.itemToMove == undefined) {
this.panel.style[prefix + 'transform'] = this.panel.style.transform = 'translateX(' + translateX + 'px)';
}
if (this._options.itemToMove == "menu" || this._options.itemToMove == "both") {
this.menu.style[prefix + 'transform'] = this.menu.style.transform = 'translate3d(' + (translateX - this.menu.clientWidth) + 'px, 0, 0)';
}

return this;
};

/**
* Set transition properties
*/
Slideout.prototype._setTransition = function() {
this.panel.style[prefix + 'transition'] = this.panel.style.transition = prefix + 'transform ' + this._duration + 'ms ' + this._fx;
if (this._options.itemToMove == "panel" || this._options.itemToMove == "both" || this._options.itemToMove == undefined) {
this.panel.style[prefix + 'transition'] = this.panel.style.transition = prefix + 'transform ' + this._duration + 'ms ' + this._fx;
}
if (this._options.itemToMove == "menu" || this._options.itemToMove == "both") {
this.menu.style[prefix + 'transition'] = this.menu.style.transition = prefix + 'transform ' + this._duration + 'ms ' + this._fx;
}

return this;
};

Expand Down Expand Up @@ -231,6 +294,10 @@ Slideout.prototype._initTouchEvents = function() {
*/
this._onTouchMoveFn = function(eve) {

if (self._startOffsetX > self._menuTriggerWidth && !self.isOpen() && self._options.itemToMove == 'menu') {
return;
}

if (scrolling || self._preventOpen || typeof eve.touches === 'undefined') {
return;
}
Expand Down Expand Up @@ -265,7 +332,13 @@ Slideout.prototype._initTouchEvents = function() {
html.className += ' slideout-open';
}

self.panel.style[prefix + 'transform'] = self.panel.style.transform = 'translateX(' + translateX + 'px)';
if (self._options.itemToMove == "panel" || self._options.itemToMove == "both" || self._options.itemToMove == undefined) {
self.panel.style[prefix + 'transform'] = self.panel.style.transform = 'translateX(' + translateX + 'px)';
}
if (self._options.itemToMove == "menu" || self._options.itemToMove == "both") {
self.menu.style[prefix + 'transform'] = self.menu.style.transform = 'translate3d(' + (translateX - self.menu.clientWidth) + 'px, 0, 0)';
}

self.emit('translate', translateX);
self._moved = true;
}
Expand Down
2 changes: 1 addition & 1 deletion test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -105,4 +105,4 @@ <h2 class="box-title">Test</h2>
};
</script>
</body>
</html>
</html>
3 changes: 2 additions & 1 deletion test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ var beforecloseEvent = false;
var closeEvent = false;
var slideout = new Slideout({
'panel': doc.getElementById('panel'),
'menu': doc.getElementById('menu')
'menu': doc.getElementById('menu'),
'itemToMove': "both" // menu || panel || both
});

slideout
Expand Down