Just pull down and release to jump between pages.
A Pen by Fabrizio Bianchi on CodePen.
| <div id="phone"> | |
| <div id="screen"> | |
| <div id="header"> | |
| <ul id="menu"> | |
| <li>Latest Movies</uli> | |
| <li>Best Movies</uli> | |
| <li>Archive</uli> | |
| <li>About</li> | |
| <li class="reload"><i class="loader-icon"></i></li> | |
| </ul> | |
| <div class="pullmenu-icon"></div> | |
| </div> | |
| <div id="loader"><i class="loader-icon anim"></i></div> | |
| <div class="pages"> | |
| <div class="page back2" id="about"> | |
| <div> | |
| <span>Pullmenu</span><br/>Menu interaction concept<br/>by @_fbrz | |
| </div> | |
| </div> | |
| <div class="page" id="latest"> | |
| <div class="box hero back11"> | |
| <span>Interstellar</span> | |
| </div> | |
| <div class="box back2"> | |
| <span>Dracula untold</span> | |
| </div> | |
| <div class="box back9 right tall"> | |
| <span>The guardians of the galaxy</span> | |
| </div> | |
| <div class="box back4"> | |
| <span>The judge</span> | |
| </div> | |
| <div class="box back3"> | |
| <span>Frank</span> | |
| </div> | |
| <div class="box back6 right"> | |
| <span>Big Hero 6</span> | |
| </div> | |
| <div class="box back8 wide"> | |
| <span>Hunger Games</span> | |
| </div> | |
| </div> | |
| <div class="page" id="best"> | |
| <div class="box wide back11"> | |
| <span>Boyhood</span> | |
| </div> | |
| <div class="box wide back2"> | |
| <span>The lego movie</span> | |
| </div> | |
| <div class="box wide back9"> | |
| <span>The Grand Budapest Hotel</span> | |
| </div> | |
| <div class="box wide back4"> | |
| <span>Dawn Of The Planet Of The Apes</span> | |
| </div> | |
| <div class="box wide back3"> | |
| <span>Nightcrawler</span> | |
| </div> | |
| <div class="box wide back6"> | |
| <span>Big Hero 6</span> | |
| </div> | |
| <div class="box wide back8"> | |
| <span>Hunger Games</span> | |
| </div> | |
| </div> | |
| <div class="page" id="archive"> | |
| <div class="box small back11"> | |
| <span>The Wizard of Oz</span> | |
| </div> | |
| <div class="box small back2"> | |
| <span>Citizen Kane</span> | |
| </div> | |
| <div class="box small back9"> | |
| <span>The Godfather</span> | |
| </div> | |
| <div class="box small back4"> | |
| <span>The Third Man</span> | |
| </div> | |
| <div class="box small back3"> | |
| <span>A Hard Day's Night</span> | |
| </div> | |
| <div class="box small back6"> | |
| <span>Modern Times</span> | |
| </div> | |
| <div class="box small back8"> | |
| <span>All About Eve</span> | |
| </div> | |
| <div class="box small back7"> | |
| <span>Metropolis</span> | |
| </div> | |
| <div class="box small back5"> | |
| <span>Singin' in the Rain</span> | |
| </div> | |
| <div class="box small back10"> | |
| <span>King Kong</span> | |
| </div> | |
| <div class="box small back1"> | |
| <span>Sunset Boulevard</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div id="home"></div> | |
| <div id="speaker"></div> | |
| </div> | |
| <div id="text"> | |
| <div id="pullmenu-icon"></div> | |
| <h1>pull<br/>menu</h1> | |
| <h2>Menu<br/>interaction<br/>concept</h2> | |
| <h3>* Pull down that icon!</h3> | |
| <h3>** Mobile demo: bit.ly/1CI6OEs</h3> | |
| </div> | |
| <a href="http://coolors.co" target="_blank" id="coolors">Coolors ></a> |
| //sorry for the mess | |
| var current_index = 0, | |
| index, | |
| menu, | |
| menu_items_count, | |
| mouse_down, | |
| mouse_start_y, | |
| pull_step, | |
| total_pull = 80, | |
| release = 40, | |
| pull_release = total_pull + release; | |
| $(document).on('selectstart', false); | |
| $(document).ready(function(){ | |
| $("#menu li").each(function(i,e){ | |
| $(this).attr("data-index",i) | |
| }); | |
| // | |
| menu = $("#menu").html(); | |
| menu_items_count = $("#menu li").length; | |
| pull_step = total_pull/(menu_items_count-1); | |
| // | |
| $("#menu").css("transform","translate3d("+getItemX(0)+"px,0,0)"); | |
| $("#menu li").removeClass("show"); | |
| $("#menu li").eq(0).addClass("show"); | |
| }); | |
| $("#header").mousedown(function(e){ | |
| // | |
| mouse_down = true; | |
| mouse_start_y = e.pageY; | |
| // | |
| if(index == menu_items_count-1) { | |
| index = 0; | |
| } else { | |
| var $item = $("#menu li").eq(index); | |
| $("#menu").html(menu); | |
| $("#menu li").eq($item.attr("data-index")).remove(); | |
| $item.prependTo($("#menu")); | |
| $("#menu li").eq(0).addClass("show"); | |
| $("#menu").addClass("notrans"); | |
| $("#menu").css("transform","translate3d("+getItemX(0)+"px,0,0)"); | |
| } | |
| }); | |
| $(document).mouseup(function(e){ | |
| if(mouse_down) { | |
| // | |
| mouse_down = false; | |
| $("#header").animate({height: 46},300); | |
| $("#menu").removeClass("show"); | |
| $(".pullmenu-icon").removeClass("hide"); | |
| // | |
| if(index>0) { | |
| if(index==menu_items_count-1) { | |
| $(".reload i").addClass("anim"); | |
| setTimeout(function(){ | |
| $("#menu li").removeClass("show"); | |
| $("#menu").css("transform","translate3d("+getItemX(0)+"px,0,0)"); | |
| $(".reload i").removeClass("anim"); | |
| setTimeout(function(){ | |
| $("#menu li").eq(0).addClass("show"); | |
| },500); | |
| },1000); | |
| } else { | |
| current_index = index; | |
| $(".pages").addClass("hide"); | |
| setTimeout(function(){ | |
| $(".pages").removeClass("hide"); | |
| $(".page").hide(); | |
| switch($("#menu li").eq(index).attr("data-index")) { | |
| case '0': $("#latest").show(); break; | |
| case '1': $("#best").show(); break; | |
| case '2': $("#archive").show(); break; | |
| case '3': $("#about").show(); break; | |
| } | |
| },1000); | |
| } | |
| } | |
| } | |
| }); | |
| $(document).mousemove(function(e){ | |
| $("#menu").removeClass("notrans"); | |
| if(mouse_down) { | |
| var diff = Math.max(0, e.pageY - mouse_start_y); | |
| if(diff>pull_release) diff = pull_release + (diff-pull_release)/(diff*0.01); | |
| $("#header").height(46+diff); | |
| index = Math.max(0,Math.min(menu_items_count-2, Math.floor((diff-release)/pull_step))); | |
| if(diff>pull_release+pull_step*2) index = menu_items_count-1; | |
| if(diff>release) { | |
| $("#menu").addClass("show"); | |
| $(".pullmenu-icon").addClass("hide"); | |
| } else { | |
| $("#menu").removeClass("show"); | |
| $(".pullmenu-icon").removeClass("hide"); | |
| } | |
| $("#menu").css("transform","translate3d("+getItemX(index)+"px,0,0)"); | |
| $("#menu li").removeClass("show"); | |
| $("#menu li").eq(index).addClass("show"); | |
| $(".loader-icon").css("transform", "rotate("+(diff*20)+"deg)"); | |
| } | |
| }); | |
| var getItemX = function(index){ | |
| var $item = $("#menu li").eq(index); | |
| var item_offset = $item.offset().left; | |
| var item_width = $item.outerWidth(); | |
| var menu_offset = $("#menu").offset().left; | |
| var screen_width = $("#screen").width(); | |
| return (menu_offset-item_offset)+(screen_width-item_width)/2; | |
| }; |
| @import url(http://fonts.googleapis.com/css?family=Lato); | |
| body { | |
| font-family: Lato; | |
| -webkit-font-smoothing: antialiased; | |
| margin: 0; | |
| background: #f5f5f5; | |
| } | |
| /* phone */ | |
| #phone { | |
| width: 310px; | |
| height: 640px; | |
| border: 2px solid #ccc; | |
| border-radius: 30px; | |
| position: absolute; | |
| left: 50%; | |
| top: 50px; | |
| margin: 0 -285px; | |
| background: #fff; | |
| } | |
| #screen { | |
| width: 290px; | |
| height: 520px; | |
| border: 1px solid #ccc; | |
| position: absolute; | |
| left: 50%; | |
| top: 50%; | |
| margin: -260px -145px; | |
| box-sizing: border-box; | |
| overflow: hidden; | |
| } | |
| #home { | |
| width: 36px; | |
| height: 36px; | |
| border: 1px solid #ccc; | |
| position: absolute; | |
| bottom: 10px; | |
| left: 50%; | |
| margin: 0 -18px; | |
| border-radius: 50%; | |
| } | |
| #speaker { | |
| width: 50px; | |
| height: 6px; | |
| border: 1px solid #ccc; | |
| border-radius: 6px; | |
| position: absolute; | |
| left: 50%; | |
| top: 25px; | |
| margin: 0 -25px; | |
| } | |
| #header { | |
| height: 46px; | |
| background: #353541; | |
| position: relative; | |
| z-index: 30; | |
| cursor: grab; | |
| &:active { | |
| cursor: grabbing; | |
| } | |
| } | |
| .pullmenu-icon { | |
| width: 16px; | |
| height: 2px; | |
| background: #FFF; | |
| position: absolute; | |
| right: 20px; | |
| bottom: 27px; | |
| transition: opacity .2s ease-in-out; | |
| &:after { | |
| content: ''; | |
| width: 8px; | |
| height: 2px; | |
| background: #FFF; | |
| position: absolute; | |
| top: 10px; | |
| left: 4px; | |
| } | |
| &:before { | |
| content: ''; | |
| width: 16px; | |
| height: 2px; | |
| background: #FFF; | |
| position: absolute; | |
| top: 5px; | |
| left: 0; | |
| } | |
| &.hide { | |
| opacity: 0; | |
| } | |
| } | |
| #title { | |
| height: 46px; | |
| } | |
| #menu { | |
| list-style: none; | |
| margin: 0; | |
| padding: 0; | |
| width: 3000px; | |
| position: absolute; | |
| top: 50%; | |
| margin: -15px 0px; | |
| transition: transform .2s ease-out; | |
| li { | |
| color: #FFF; | |
| font-size: 15px; | |
| font-weight: 600; | |
| display: inline-block; | |
| padding: 0 20px; | |
| opacity: 0; | |
| transition: opacity .2s ease-out; | |
| &.show { | |
| opacity: 1!important; | |
| } | |
| &.reload { | |
| margin-left: 200px; | |
| position: relative; | |
| top: 6px; | |
| transition: opacity 0s ease-out; | |
| } | |
| } | |
| &.show li { | |
| opacity: .2; | |
| } | |
| &.notrans { | |
| transition: none; | |
| } | |
| } | |
| .loader-icon { | |
| box-sizing: border-box; | |
| width: 20px; | |
| height: 20px; | |
| border-radius: 10px; | |
| border: 2px solid #fff; | |
| border-bottom-color: transparent; | |
| display: block; | |
| &.anim { | |
| animation: loader 1s infinite linear; | |
| } | |
| } | |
| #loader .loader-icon { | |
| border: 2px solid #353541; | |
| border-bottom-color: transparent; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| z-index: 10; | |
| margin: -8px; | |
| } | |
| @keyframes loader { | |
| 0% { transform: rotate(0); } | |
| 100% { transform: rotate(359deg); } | |
| } | |
| .pages { | |
| transform: translate3d(0,0,0); | |
| transition: opacity .2s linear; | |
| z-index: 29; | |
| position: absolute; | |
| width: 318px; | |
| height: 100%; | |
| &.hide { | |
| transition: opacity .1s linear; | |
| opacity:0; | |
| } | |
| } | |
| .page { | |
| overflow-y: auto; | |
| overflow-x: hidden; | |
| height: 472px; | |
| display: none; | |
| padding-right: 15px; | |
| } | |
| #latest { | |
| display: block; | |
| } | |
| .back1 { background: -webkit-linear-gradient(-50deg, rgb(174, 147, 187), rgb(166, 61, 113)); } | |
| .back2 { background: -webkit-linear-gradient(-50deg, rgb(151, 199, 148), rgb(18, 101, 108)); } | |
| .back3 { background: -webkit-linear-gradient(-50deg, rgb(128, 143, 182), rgb(55, 63, 82)); } | |
| .back4 { background: -webkit-linear-gradient(-50deg, rgb(202, 162, 133), rgb(192, 191, 60)); } | |
| .back5 { background: -webkit-linear-gradient(-50deg, rgb(147, 176, 187), rgb(61, 122, 166)); } | |
| .back6 { background: -webkit-linear-gradient(-50deg, rgb(187, 167, 147), rgb(166, 93, 61)); } | |
| .back7 { background: -webkit-linear-gradient(-50deg, rgb(157, 147, 187), rgb(102, 89, 161)); } | |
| .back8 { background: -webkit-linear-gradient(-50deg, rgb(175, 171, 178), rgb(105, 95, 100)); } | |
| .back9 { background: -webkit-linear-gradient(-50deg, rgb(165, 137, 176), rgb(211, 92, 92)); } | |
| .back10 { background: -webkit-linear-gradient(-50deg, rgb(147, 187, 149), rgb(90, 119, 78)); } | |
| .back11 { background: -webkit-linear-gradient(-50deg, rgb(189, 229, 208), rgb(18, 60, 108)); } | |
| .box { | |
| height: 116px; | |
| position: relative; | |
| width: 50%; | |
| float: left; | |
| &.right { | |
| float: right; | |
| } | |
| &.tall { | |
| height: 232px; | |
| } | |
| &.wide { | |
| width: 100%; | |
| } | |
| &.small { | |
| width: 100%; | |
| height: 70px; | |
| } | |
| &.hero { | |
| height: 240px; | |
| width: 100%; | |
| span { | |
| font-size: 23px; | |
| } | |
| } | |
| span { | |
| position: absolute; | |
| color: #fff; | |
| font-size: 15px; | |
| bottom: 0; | |
| left: 0; | |
| text-transform: uppercase; | |
| padding: 25px 25px; | |
| font-weight: 600; | |
| } | |
| } | |
| #about { | |
| color: #fff; | |
| text-transform: uppercase; | |
| text-align: center; | |
| font-weight: 600; | |
| font-size: 11px; | |
| div { | |
| position: relative; | |
| left: -6px; | |
| top: 50%; | |
| margin-top: -30px; | |
| } | |
| span { | |
| font-size: 20px; | |
| } | |
| } | |
| #text { | |
| position: absolute; | |
| height: 640px; | |
| left: 50%; | |
| top: 50px; | |
| margin: 0px 75px; | |
| color: #353541; | |
| h1 { | |
| margin: 0; | |
| font-size: 70px; | |
| line-height: 60px; | |
| text-transform: uppercase; | |
| } | |
| h2 { | |
| font-size: 23px; | |
| margin: 0; | |
| text-transform: uppercase; | |
| margin-top: 10px; | |
| } | |
| h3 { | |
| opacity: 0.3; | |
| font-style: italic; | |
| font-weight: 400; | |
| font-size: 16px; | |
| margin-top: 30px; | |
| } | |
| } | |
| #pullmenu-icon { | |
| width: 40px; | |
| height: 5px; | |
| background: #353541; | |
| margin-top: 69px; | |
| position: relative; | |
| margin-bottom: 40px; | |
| left: 6px; | |
| &:before { | |
| width: 40px; | |
| height: 5px; | |
| background: #353541; | |
| content: ''; | |
| position: absolute; | |
| top: 10px; | |
| } | |
| &:after { | |
| width: 22px; | |
| height: 5px; | |
| background: #353541; | |
| content: ''; | |
| position: absolute; | |
| top: 20px; | |
| left: 9px; | |
| } | |
| } | |
| #coolors { | |
| position: fixed; | |
| bottom: 20px; | |
| right: 30px; | |
| text-decoration: none; | |
| color: #353541; | |
| font-size: 11px; | |
| text-transform: uppercase; | |
| } |