上下にフリックできたり、横にスクロールできたり。
jsでがんばって書いた。
ほとんどabsoluteとwidth100%で制御。
その都度値取らなきゃいけないから、コード長い…
iOSみたいなすりガラス風背景ぼかし。(まだ不完全な感じかもー)
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
<script>
$(function(){
//ドラッグしたときの操作
var dragStart = "";
var dragEnd = "";
var dragPosition = "";
$(".beforeMenu").draggable({
axis:"y",
//ドラッグに合わせる
drag: function(e, ui){
dragPosition = ui.position.top;
$(".btnMenu").css({top:dragPosition + 10});
$(".btnItem").css({bottom:-dragPosition + 10});
$(".itemNavis, .mainImg").css({bottom:-dragPosition});
//ドラッグし始めたらメニューかアイテム表示しない
if(dragPosition > 0){
$(".item").fadeOut();
}else if(dragPosition < 0){
$(".menu").fadeOut();
}
},
start: function(e, ui) {
dragStart = ui.position.top;
},
stop: function(e, ui) {
dragEnd = ui.position.top;
//メインが表示されているとき
var menuHeight = $(".menu").height();
var itemHeight = $(".item").height();
if(dragStart == 0){
//メニュー表示 下にスライド
if(dragStart < dragEnd){
$(".beforeMenu").animate({top:menuHeight},300);
$(".btnMenu").animate({top:menuHeight + 10},300);
$(".btnItem").animate({bottom:-menuHeight +10},300);
$(".itemNavis, .mainImg").animate({bottom:-menuHeight},300);
$(".btnMenu img:first").fadeOut();
$(".btnMenu img:last").fadeIn();
$(".main").toggleClass("afterMenu");
$(".main").toggleClass("beforeMenu");
}else if(dragStart > dragEnd){
//アイテム表示 上にスライド
$(".beforeItem").animate({top:"-30%"},300);
$(".btnMenu").animate({top:-itemHeight - 10},300);
$(".btnItem").animate({bottom:itemHeight + 10},300);
$(".itemNavis, .mainImg").animate({bottom:itemHeight},300);
$(".btnItem img:first").fadeOut();
$(".btnItem img:last").fadeIn();
$(".item").scrollLeft(0);
$(".main").toggleClass("afterItem");
$(".main").toggleClass("beforeItem");
}
}else if(dragStart > 0){
//元に戻す 上にスライド
if(dragStart > dragEnd){
$(".afterMenu").animate({top:0},300);
$(".btnMenu").animate({top:"10px"},300);
$(".btnItem").animate({bottom:"10px"},300);
$(".itemNavis, .mainImg").animate({bottom:0},300);
$(".btnMenu img:first").fadeIn();
$(".btnMenu img:last").fadeOut();
$(".main").toggleClass("afterMenu");
$(".main").toggleClass("beforeMenu");
$(".item").fadeIn();
}
}else if(dragStart < 0){
//元に戻す 下にスライド
if(dragStart < dragEnd){
$(".afterItem").animate({top:0},300);
$(".btnMenu").animate({top:"10px"},300);
$(".btnItem").animate({bottom:"10px"},300);
$(".itemNavis, .mainImg").animate({bottom:0});
$(".btnItem img:first").fadeIn();
$(".btnItem img:last").fadeOut();
$(".main").toggleClass("afterItem");
$(".main").toggleClass("beforeItem");
$(".menu").fadeIn();
}
}
}
});
//ボタンをクリックしたときの操作
//メニュー表示 下にスライド
$(".btnMenu").click(function(){
var menuHeight = $(".menu").height();
if($(".main").css("top") == "0px"){
$(".btnMenu").animate({top:menuHeight + 10});
$(".btnItem").animate({bottom:-menuHeight + 10});
$(".itemNavis, .mainImg").animate({bottom:-menuHeight});
$(".btnMenu img:first").fadeOut();
$(".btnMenu img:last").fadeIn();
$(".item").fadeOut();
}else{
$(".btnMenu").animate({top:"10px"});
$(".btnItem").animate({bottom:"10px"});
$(".itemNavis, .mainImg").animate({bottom:0});
$(".btnMenu img:first").fadeIn();
$(".btnMenu img:last").fadeOut();
$(".item").fadeIn();
}
$(".beforeMenu").animate({top:menuHeight});
$(".afterMenu").animate({top:0});
$(".main").toggleClass("afterMenu");
$(".main").toggleClass("beforeMenu");
});
//アイテム表示 下にスライド
$(".btnItem").click(function(){
var itemHeight = $(".itemList").height();
if($(".main").css("top") == "0px"){
$(".btnMenu").animate({top:-itemHeight - 10});
$(".btnItem").animate({bottom:itemHeight + 10});
$(".itemNavis, .mainImg").animate({bottom:itemHeight});
$(".btnItem img:first").fadeOut();
$(".btnItem img:last").fadeIn();
$(".item").scrollLeft(0);
$(".menu").fadeOut();
}else{
$(".btnMenu").animate({top:"10px"});
$(".btnItem").animate({bottom:"10px"});
$(".itemNavis, .mainImg").animate({bottom:0});
$(".btnItem img:first").fadeIn();
$(".btnItem img:last").fadeOut();
$(".menu").fadeIn();
}
$(".beforeItem").animate({top:"-30%"});
$(".afterItem").animate({top:0});
$(".main").toggleClass("afterItem");
$(".main").toggleClass("beforeItem");
});
//メインクリックしたら元に戻る
if($(".main").css("top") != 0){
$(".main").click(function(){
if($(".main").css("top") > "0px"){
$(".main").animate({top:0});
$(".btnMenu").animate({top:"10px"});
$(".btnItem").animate({bottom:"10px"});
$(".itemNavis, .mainImg").animate({bottom:0});
$(".main").toggleClass("afterMenu");
$(".main").toggleClass("beforeMenu");
$(".btnMenu img:first").fadeIn();
$(".btnMenu img:last").fadeOut();
$(".item").fadeIn();
}else if($(".main").css("top") < "0px"){
$(".main").animate({top:0});
$(".btnMenu").animate({top:"10px"});
$(".btnItem").animate({bottom:"10px"});
$(".itemNavis, .mainImg").animate({bottom:0});
$(".main").toggleClass("afterItem");
$(".main").toggleClass("beforeItem");
$(".btnItem img:first").fadeIn();
$(".btnItem img:last").fadeOut();
$(".menu").fadeIn();
}
});
}
//アイテムを横にスクロールしたとき
$(".item").scroll(function(){
var scrollPosition = $(".item").scrollLeft();
//前に進むボタンの表示
if(scrollPosition > 0){
$(".btnPrev").fadeIn("slow");
}else{
$(".btnPrev").fadeOut("slow");
}
//次に進むボタンの表示
var scrollWidth = $(".itemLists").width();
var bodyWidth = $("body").width();
if(scrollPosition == (scrollWidth - bodyWidth)){
$(".btnNext").fadeOut("slow");
}else{
$(".btnNext").fadeIn("slow");
}
});
//前に進むボタン押したとき
$(".btnPrev").click(function(){
var itemWidth = $(".itemList").width();
var scrollPosition = $(".item").scrollLeft();
if(scrollPosition < itemWidth + 20){
$(".item").animate({
scrollLeft: 0
},500);
}else if(itemWidth < scrollPosition && scrollPosition < itemWidth * 2+ 20){
$(".item").animate({
scrollLeft: itemWidth
},500);
}else if(itemWidth * 2 < scrollPosition && scrollPosition < itemWidth * 3+ 20){
$(".item").animate({
scrollLeft: itemWidth * 2
},500);
}
});
//次に進むボタン押したとき
$(".btnNext").click(function(){
var itemWidth = $(".itemList").width();
var scrollPosition = $(".item").scrollLeft();
if(scrollPosition < itemWidth){
$(".item").animate({
scrollLeft: itemWidth
},500);
}else if(itemWidth - 20 < scrollPosition && scrollPosition < itemWidth * 2){
$(".item").animate({
scrollLeft: itemWidth * 2
},500);
}else if(itemWidth * 2 - 20 < scrollPosition && scrollPosition < itemWidth * 3){
$(".item").animate({
scrollLeft: itemWidth * 3
},500);
}
});
//アイテムをクリックしたら左にぴったりになる
/*$(".itemList").click(function(){
var itemIndex = $(".itemList").index(this);
$(".item").animate({
scrollLeft: itemWidth * itemIndex
},500);
});*/
//アイテムナビを押したとき
$(".itemNavi").click(function(){
var itemNaviIndex = $(".itemNavi").index(this);
var itemWidth = $(".itemList").width();
$(".item").animate({scrollLeft: itemWidth * itemNaviIndex},500);
var itemHeight = $(".itemList").height();
$(".btnMenu").animate({top:-itemHeight - 10});
$(".btnItem").animate({bottom:itemHeight + 10});
$(".itemNavis, .mainImg").animate({bottom:itemHeight});
$(".beforeItem").animate({top:"-30%"});
$(".main").addClass("afterItem");
$(".main").removeClass("beforeItem");
$(".menu").fadeOut();
});
});
</script>
</head>