Ajaxを使ったメールフォームとかってやっぱり素敵ですよね。
以前仕事で写真投稿付きのフォームを作らざるを得なかったので、どうせならということでAjax化しました。
というわけでjQuery.uploadを使って写真をアップロードして、サムネイルを表示するチュートリアルです。
2011-12-03追記:デモ作りました。jQuery.uploadを使ったフォームのデモを作りました。
Ajaxを使ったメールフォームとかってやっぱり素敵ですよね。
以前仕事で写真投稿付きのフォームを作らざるを得なかったので、どうせならということでAjax化しました。
というわけでjQuery.uploadを使って写真をアップロードして、サムネイルを表示するチュートリアルです。
2011-12-03追記:デモ作りました。jQuery.uploadを使ったフォームのデモを作りました。
サイトの高速化を図るためにGoogleにホスティングされているjqueryを使いたいとき、WordPressのデフォルトのjQueryが邪魔で仕方ないことが結構ありまして。。。
そんな時functions.phpで少しのコードを書くだけでどうにでもなります。
[php]
//Replace jQuery
function rep_jQuery(){
if (!is_admin()) {
wp_deregister_script(‘jquery’);
wp_enqueue_script(‘jquery’,’http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js’);
wp_deregister_script(‘jquery-ui-core’);
wp_enqueue_script(‘jquery-ui-core’,’http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js’);
}
}
add_action(‘init’,’rep_jQuery’);
[/php]
管理画面でも使いたい場合はif文を外してもらえば全てに適応されます。
この例だと、jquery1.5系と、jQuery UIの1.8系の最新版が読み込まれます。
その他細かい仕様等はGoogleさんに聞いてみてください、
http://code.google.com/apis/libraries/devguide.html
bassistance.de » jQuery plugin: Validation
とかjQueryでフォームの入力チェックのプラグインは高機能なものがあるのですが、勉強ついでに作ってみました。
jQuery hashchange eventを使ったWordPressテーマを作成してみました。
デモサイトはコチラ
一応HashLogなんていうそのまんまな名前です。
Ver0.1というアルファバージョンです。一応CSS周りはIE7までOKのはずです。
WordPress3以上対応です。
制作の元ネタにでもして頂けたらと思います。
ダウンロードはこちらからどうぞ。
hashlog
これだけではちょっとあれなのでJS周りのソースを張っておきます。
[php]
<script type="text/javascript" src="<?php bloginfo( ‘stylesheet_directory’ ); ?>/js/jquery.ba-hashchange.min.js"></script>
<script type="text/javascript" src="<?php bloginfo( ‘stylesheet_directory’ ); ?>/js/jquery.easing.1.3.js"></script>
<script type="text/javascript">
var blogUrl = "<?php bloginfo( ‘url’ ); ?>";
</script>
<script type="text/javascript">
//ハッシュ付にリダイレクトさせる。
if ( location.href != blogUrl+"/") {
var index = location.href.indexOf(blogUrl+"/#",0);
if(index < 0){
var goHash = location.href.replace(blogUrl, ”);
location.href =blogUrl+ ‘#’ + goHash;
}
}
jQuery(function($){
//hrefをハッシュ付に変更
function changeHref(){
$("#contentsArea a,#siteId a,#widgetArea a").each(function(){
var setHref = $(this).attr("href").replace(blogUrl, ‘#’);
if(setHref.match(/^\//)){
setHref = "#"+setHref;
}
$(this).attr({href:setHref});
});
}
changeHref();
//Ajaxで変更する部分
var contentsArea = $("#contentsArea");
contentsArea.css({height:0,opacity:0,marginBottom:0});
var nowHash = "";
$(window).hashchange(function() {
var setHash = location.hash.replace(‘#’, ”);
//for Front Page
if(!setHash){
setHash = "/?p=0";
}
//ページ内リンク(コメントの返信は除く)
if(setHash.indexOf("#",0)>-1 && setHash.indexOf("respond",0)<0){
var sel = setHash.match(/(#.+)$/);
var target = $(sel[1]).offset().top;
$(‘html,body’).delay(100).animate({ scrollTop: target }, 200,"easeOutQuart");
}else{
//コンテンツの削除
contentsArea.animate({height:0,opacity:0,marginBottom:0},200,function(){
//ロード
$(this).hide().load(setHash+" #contents",function(){
//表示
$(this).delay(200).show().animate({height:$(this).find("#contents").height(),opacity:"1",marginBottom:"36px"},200,"easeOutQuart",function(){
changeHref();
//コメントの返信だった場合の処理
if(setHash.indexOf("respond",0)>-1){
var respondOffset = $("#respond").offset().top;
$(‘html,body’).delay(100).animate({ scrollTop: respondOffset }, 200,"easeOutQuart");
}
});
});
});
}
nowHash = setHash;
});
//検索フォーム
$("form").submit(function(){
var s = $("#s").val();
location.href = ‘/#/?s=’+s;
return false;
});
$(window).hashchange();
});
</script>
[/php]
という感じでWordPressとの連携をとっています。トップページの記事はパラメーターにp=0を入れて表示しています。page_idやp等に存在しない値を放り込むとトップページの内容を表示することを利用しています。
空白だといまいちうまくいきませんでしたので、こんなおかしなことをやっています。
indexOfとmatchとか色々混在していて見づらいソースですが、そこはご愛敬ということで、ご勘弁下さい。徐々に直していこうと思いますので。
昨日やっていたHTML5とJavaScriptの切っても切れない関係/CPI x CSS Nite「After Dark」(1)で紹介されていたjQuery hashchange event のデモを早速作ってみました。
https://torounit.com/demo/hashtag/
1/24:スクリプトエラーを修正しました。
制作に当たっては5509様のところの
Ajaxやタブ切替には必須かも?ブラウザの「戻る」「進む」を有効にするjQueryのhashchangeプラグイン
を参考にさせてもらっていますです。
[js]
$(function(){
$(window).hashchange(function() {
$("hoge").load(location.hash.replace(‘#’, ”)+ "hogehoge");
});
$(window).hashchange();
$("a").each(function(){
var setHref = $(this).attr("href").replace("http://hoge.com", "#");
$(this).attr({href:setHref})
});
});
[/js]
のように使います。
追記:学び処 立志塾様のサイト制作で活用させて頂きました。
aタグのhrefのドメインを削除して代わりに#を入れています。これで、画面遷移が無くなります。
ソースに直接#を書くとjs非対応の場合に不都合が出てくるので、jsで置換します。
js無しの場合は普通にリンクで飛ぶようにしてあげています。
このやり方だと、直接内部のページに飛んだときにjsで#付きにリダイレクトさせてあげる必要があります。
また、ソースに記述する場合、#の代わりに#!を用いると、Googleはトラッキングしてくれるようです。サイトによって選択してゆく必要がありそうですね。
ただし、そんな必要があるのってtwitterのようなwebアプリとかですかね。
やはり画面遷移を無しにコンテンツを見せることができるというのはかなり大きなメリットになるのではないですかね。。。
しかし、これhashchangeって言うんですね。知らなかった。というか、名前がわからないからどう調べていいかわからなかったという。。。
WordPressをCMSとして使うとき、カテゴリが複数セットされていたり、未選択の場合などが考えられます。
意外にあれに苦しむことがあるので、functions.phpで対応しようと思います。
会社で、研修生とアシスタントさん向けのHTML5のお話をしたときの参考資料。
セクショニングの考え方をメインにやったので、自分のためのメモとして・・・
ie7-js – Project Hosting on Google Code
に有る、ie9.jsがとても便利です。
js非表示のクライアントはどうするって話もあるので、それはCase by Caseってことで。。。。
display:boxはまだまだ実装が微妙だし、display:inline-blockやfloatだと、要素の高さ自体は変わらなくてborderとかbackgroundを使ったときいまいち困ったり。
というわけでそんなとき用のjs。相変わらずjQueryです。
ここ数年の流行りとして、wrapperがよくある。
けれどもbody要素をwrapperに代換することはできないだろうかと。
で、検証。
margin = 有効
padding = 有効
width = △
環境はfirefox3.6です。一応他のブラウザでも大体一緒の実装です。
bodyのwidthは内部コンテンツの横幅などに対しては有効。
background等bodyのボックス要素そのものの指定に対しては無効。といった感じです。
wrapperの部分にのみ背景が当たっている、<center>の代わりwrapperを使っているようなレイアウトの場合、一考の余地があるのではないかなと思います。
僕が運営するサイトのリニューアルにLightboxでスライドショーを作ったり、いろいろしたかったので、たくさんスクリプトを試してみた。
定番です。
設置方法はコチラに。
http://www.two-hearts.net/2009/05/shadowboxjs-version-30b.html
[xhtml]
<link rel="stylesheet" type="text/css" href="shadowbox/shadowbox.css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="shadowbox/shadowbox.js"></script>
<script type="text/javascript">
Shadowbox.init({
language: "en",
players: ["img","swf"]});
</script>
[/xhtml]
で、
[xhtml]<a href="movie.swf" rel="shadowbox;width=500;height=375"><img src="images/movie.jpg" /></a>[/xhtml]
とかで動いてくれます。
ImageMapやFLASHにも対応してるのはかなり高得点。protopypeやJqueryなど6種類のライブラリを使えるのはすごい。
languageをjaにすると、“Next”とかが“次へ”になりますが、エンコードがuft-8じゃないとダメらしい。
これもFlash等に対応してて使いやすい。
何故かPHPと一緒に使うと、いらないスクロールバーがfirefoxとOperaで出て断念しましたが。
スライドショーのグループ化?的な事が出来ないのがちょっと難点。アニメーションはとても綺麗。
軽い。Jquery系。Youtube等も読める。
prettyPhoto a jQuery lightbox clone
Jquery系。角が丸いのがオサレ(笑)
コチラもかなりたくさんの形式に対応しております。若干重い気もしますが。
とりあえず、ShadowBoxが使えれば大体OKなんじゃないかと、思ってみたり。
HTML5が来年の秋に正式勧告されるし、主要ブラウザも対応してきた(IE?なんのこと?w)のでちょっとそれでサイトを組んでみようかと思っていたり。
サイトによっていろいろ違うのでいまいちピンと来なかったのですが、こんなの見つけました。
http://web.g.hatena.ne.jp/keyword/article
独立可能=フィードで配信出来る
これは大きなヒント。おそらく、ナビゲーションとか、広告とか、そういうページの”本文”的な部分に使うのが、article
で、その中の項目、往々にして見出しを含む、ものがsectionってところかや?
とりあえず、
[html]
<body>
<header>
<h1>Site Name</h1>
</header>
<nav>
<ul>
<li><a href="#">navi1</a></li>
<li><a href="#">navi2</a></li>
<li><a href="#">navi3</a></li>
</ul>
</nav>
<article>
<section>
<h2>Title1</h2>
<p>…</p>
</section>
<section>
<h2>Title2</h2>
<p>…</p>
</section>
</article>
<aside>…</aside>
<footer>…</footer>
</body>
[/html]
的なマークアップになる感じですね。
移行するのが大変なんですけど、コードの終わりの方の</div></div>・・・・・・から解放されるというだけで十分なメリットが。