Skip to content

Commit

Permalink
Add touch slideout menu for mobile
Browse files Browse the repository at this point in the history
  • Loading branch information
maxpoulin64 committed Jun 12, 2016
1 parent ee0ebdc commit 45fe17e
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 14 deletions.
23 changes: 17 additions & 6 deletions client/css/style.css
Expand Up @@ -184,13 +184,22 @@ button,

#viewport {
height: 100%;
transition: all .4s;
transition: all .2s;
-webkit-transform: translateZ(0);
transform: translateZ(0);
-webkit-perspective: 1000;
perspective: 1000;
}

#viewport.menu-open {
-webkit-transform: translate3d(220px, 0, 0);
transform: translate3d(220px, 0, 0);
}

#viewport.menu-dragging {
transition: none !important;
}

#viewport .lt,
#viewport .rt,
#chat button.menu {
Expand Down Expand Up @@ -1618,11 +1627,6 @@ button,
margin-top: 60px !important;
}

#viewport.lt {
-webkit-transform: translate3d(220px, 0, 0);
transform: translate3d(220px, 0, 0);
}

#viewport.rt #chat .sidebar {
-webkit-transform: translate3d(-180px, 0, 0);
transform: translate3d(-180px, 0, 0);
Expand Down Expand Up @@ -1668,6 +1672,13 @@ button,
}
}

@media (min-width: 769px) {
#viewport {
-webkit-transform: none !important;
transform: none !important;
}
}

@media (max-width: 479px) {
.container {
margin: 40px 0 !important;
Expand Down
85 changes: 85 additions & 0 deletions client/js/libs/slideout.js
@@ -0,0 +1,85 @@
/**
* Simple slideout menu implementation.
*/
function slideoutMenu(viewport, menu) {
var touchStartPos = null;
var touchCurPos = null;
var touchStartTime = 0;
var menuWidth = parseFloat(window.getComputedStyle(menu).width);
var menuIsOpen = false;

function toggleMenu(state) {
menuIsOpen = state;
viewport.classList.toggle("menu-open", state);
}

function disableSlideout() {
viewport.removeEventListener("ontouchstart", onTouchStart);
}

function onTouchStart(e) {
if (e.touches.length !== 1) {
onTouchEnd(null);
return false;
}

var touch = e.touches.item(0);
viewport.classList.toggle("menu-dragging", true);

if ((!menuIsOpen && touch.screenX < 50) || (menuIsOpen && touch.screenX > menuWidth)) {
touchStartPos = touch;
touchCurPos = touch;
touchStartTime = Date.now();

viewport.addEventListener("touchmove", onTouchMove);
viewport.addEventListener("touchend", onTouchEnd);
}
}

function onTouchMove(e) {
var touch = touchCurPos = e.touches.item(0);
var setX = touch.screenX - touchStartPos.screenX;

if (menuIsOpen) {
setX += menuWidth;
}

if (setX > menuWidth) {
setX = menuWidth;
} else if (setX < 0) {
setX = 0;
}

viewport.style.transform = "translate3d(" + setX + "px, 0, 0)";
e.preventDefault();
e.stopPropagation();
}

function onTouchEnd() {
var diff = touchCurPos.screenX - touchStartPos.screenX;
var absDiff = Math.abs(diff);

if (absDiff > menuWidth / 2 || Date.now() - touchStartTime < 180 && absDiff > 50) {
toggleMenu(diff > 0);
}

viewport.removeEventListener("touchmove", onTouchMove);
viewport.removeEventListener("touchend", onTouchEnd);
viewport.classList.toggle("menu-dragging", false);
viewport.style.transform = null;

touchStartPos = null;
touchCurPos = null;
touchStartTime = 0;
}

viewport.addEventListener("touchstart", onTouchStart);

return {
disable: disableSlideout,
toggle: toggleMenu,
isOpen: function() {
return menuIsOpen;
}
};
}
20 changes: 12 additions & 8 deletions client/js/lounge.js
Expand Up @@ -510,18 +510,22 @@ $(function() {
});

var viewport = $("#viewport");
var sidebarSlide = slideoutMenu(viewport[0], sidebar[0]); // eslint-disable-line
var contextMenuContainer = $("#context-menu-container");
var contextMenu = $("#context-menu");

viewport.on("click", ".lt, .rt", function(e) {
chat.on("click", function(e) {
if ($(e.target).is(".lt")) {
sidebarSlide.toggle(!sidebarSlide.isOpen());
} else if (sidebarSlide.isOpen()) {
sidebarSlide.toggle(false);
}
});

viewport.on("click", ".rt", function(e) {
var self = $(this);
viewport.toggleClass(self.attr("class"));
if (viewport.is(".lt, .rt")) {
e.stopPropagation();
chat.find(".chat").one("click", function() {
viewport.removeClass("lt");
});
}
e.stopPropagation();
});

function positionContextMenu(that, e) {
Expand Down Expand Up @@ -688,7 +692,7 @@ $(function() {
toggleFaviconNotification(false);
}

viewport.removeClass("lt");
sidebarSlide.toggle(false);
$("#windows .active")
.removeClass("active")
.find(".chat")
Expand Down

0 comments on commit 45fe17e

Please sign in to comment.