iPadのSafariで開き、「ホーム画面に追加」を実施する。
次回、ホーム画面に作成されたアイコンをタップするとフルスクリーンで表示される。
または、iPadのChromeで開けばフルスクリーンで表示される。
フリックで、次の写真が表示されます。
タップで、コメントが表示されます。もう一度タップすると消えます。
以下のサイトを参考にフリックで写真をスライドさせるiPad用Webアプリを作成しました。
①jQueryでフリック/スワイプ動作の画像スライドギャラリーを作成する実験〈リンク〉
②さくっと簡単!jQueryでコンテンツをオーバーレイ表示させる方法〈リンク〉
以下がhtmlです。
①のスクリプトをベースに、②を参考にして、タッチでコメントをオーバーレイさせるスクリプトを追加しました。(追加とコメントしてある部分)
8行目は、Safariでフルスクリーン表示するための記述。
14~16行目は、chromeで開いたときに、仮想的なスクロールを実施することで、ツールバーを非表示にさせるために(フルスクリーンにするために)追加しました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>フリックでスライドさせるWebアプリ</title>
<meta http-equiv="content-style-type" content="text/css" />
<meta http-equiv="content-script-type" content="text/javascript" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<link rel="stylesheet" type="text/css" href="css/base.css" media="all" />
<link rel="stylesheet" type="text/css" href="css/common.css" media="all" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
window.onload = function(){
window.scroll(0,0);
} // 追加
// 以下、http://black-flag.net/jquery/20120306-3710.htmlのスクリプトをコピーして作成
$(function(){
var $setMainId = $('#flickscroll');
var scrollSpeed = 300;
var overlay = false; // 追加
var $setMainUl = $setMainId.children('ul'),
listWidth = parseInt($setMainUl.children('li').css('width')),
listCount = $setMainUl.children('li').length,
leftMax = -((listWidth)*((listCount)-1));
$setMainUl.each(function(){
$(this).css({width:(listWidth)*(listCount)});
});
var isTouch = ('ontouchstart' in window);
$setMainUl.bind(
{'touchstart mousedown': function(e){
var $setMainUlNot = $setMainId.children('ul:not(:animated)');
$setMainUlNot.each(function(){
e.preventDefault();
this.pageX = (isTouch ? event.changedTouches[0].pageX : e.pageX);
this.leftBegin = parseInt($(this).css('left'));
this.left = parseInt($(this).css('left'));
this.touched = true;
this.moved = false; // 追加
});
},'touchmove mousemove': function(e){
if(!this.touched){
return;
}
this.moved = true; // 追加
e.preventDefault();
this.left = this.left - (this.pageX - (isTouch ? event.changedTouches[0].pageX : e.pageX) );
this.pageX = (isTouch ? event.changedTouches[0].pageX : e.pageX);
if(this.left < 0 && this.left > leftMax){
$(this).css({left:this.left});
} else if(this.left >= 0) {
$(this).css({left:'0'});
} else if(this.left <= leftMax) {
$(this).css({left:(leftMax)});
}
},'touchend mouseup mouseout': function(e){
if (!this.touched) {
return;
}
this.touched = false;
if (!this.moved) {
if ( overlay == false ){
$(".description").fadeIn();
overlay = true;
}
else{
$(".description").fadeOut();
overlay = false;
}
} // 追加 http://liginc.co.jp/web/js/jquery/39777を参照
this.moved = false; //
if(this.leftBegin > this.left && (!((this.leftBegin) === (leftMax)))){
$(this).stop().animate({left:((this.leftBegin)-(listWidth))},scrollSpeed);
} else if(this.leftBegin < this.left && (!((this.leftBegin) === 0))) {
$(this).stop().animate({left:((this.leftBegin)+(listWidth))},scrollSpeed);
} else if(this.leftBegin === 0) {
$(this).css({left:'0'});
} else if(this.leftBegin <= leftMax) {
$(this).css({left:(leftMax)});
}
}
});
});
</script>
</head>
<body>
<div id="container">
<div id="flickscroll">
<ul>
<li><img src="img/photo01.jpg" width="1024" height="768" alt="" /><div class="description">アカバナシモツケソウ</div></li>
<li><img src="img/photo02.jpg" width="1024" height="768" alt="" /><div class="description">アサギマダラ</div></li>
<li><img src="img/photo03.jpg" width="1024" height="768" alt="" /><div class="description">イブキジャコウソウ ピラタス蓼科</div></li>
<li><img src="img/photo04.jpg" width="1024" height="768" alt="" /><div class="description">イブキジャコウソウ</div></li>
</ul>
</div><!--/#flickscroll-->
<div id="overlay">
<p id="text">XXX</p>
</div>
</div><!--/#container-->
</body>
</html>
以下がcssです。
base.cssは、①のものをそのまま使いました。
common.cssは、①のものをベースに、
・幅と高さを、1024pxと768pに変更した。
・コメントを表示するdivのclassのcssを追加した。
common.css
@charset "utf-8";
/* =======================================
CommonElements
======================================= */
body {
font-size: 100%;
line-height: 140%;
font-family: Arial,Helvetica,sans-serif;
color: #000;
text-align: center;
background: #fff;
}
#container {
margin: 0 auto;
/* width: 1024px; */
text-align: center;
}
/* #flickscroll
--------------------------- */
#flickscroll {
margin: 0 auto;
width: 1024px;
height: 768px;
text-align: left;
position: relative;
top: -20px;
overflow: hidden;
cursor: pointer;
}
#flickscroll ul {
left: 0;
height: 768px;
position: absolute;
overflow: hidden;
}
#flickscroll ul li {
width: 1024px;
height: 768px;
float: left;
display: inline;
overflow: hidden;
}
.description{
display: none;
position: relative;
padding: 10px;
top: -128px;
font-size: 24px;
width: 1024px;
height:128px;
text-align: left;
color: #eee;
background: rgba(0,0,0,0.7);
}
base.css
@charset "utf-8";
/* =======================================
CSS BrowserReset BaseElements
(C)BLACKFLAG.NET ALL RIGHTS RESERVED.
http://black-flag.net/
======================================= */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
font-family: inherit;
font-style: inherit;
font-weight: inherit;
/* outline: 0;*/
}
html {
font-size: 75%;
filter: expression(document.execCommand("BackgroundImageCache", false, true));
}
img {
vertical-align: text-bottom;
-ms-interpolation-mode: bicubic;
}
strong {
font-weight: bold;
}
ol, ul {
list-style: none;
}
table {
border-collapse: collapse;
/* border-collapse: separate;*/
border-spacing: 0;
}
caption, th, td {
font-weight: normal;
text-align: left;
vertical-align: top;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: "";
}
blockquote, q {
quotes: "" "";
}
a:focus {
/*\*/
overflow: hidden;
/**/
}
option {
padding-right: 10px;
}