カテゴリー: Ajax

  • jQueryで他のページの情報を読み込む

    jQueryでAjaxをやるのって実際とても簡単なのです。
    RSSリーダーやTwitterのFeed等を簡単に遅延読み込みとかできたり、ページ遷移無しに他のコンテンツをロードなど、色々できてしまいます。

    load( url, data, callback )

    超お手軽Ajax関数です。urlのページを表示します。また、urlの後ろにスペースを空け、続けてセレクタを書くと、その要素だけとってくることができます。

    [js]
    $("#loadArea").load("/hoge/ #hogehoge ul");
    [/js]

    で、/hoge/の
    [html]
    <div id="hogehoge">
    <ul>
    <li>list1</li>
    <li>list2</li>
    <li>list3</li>
    </ul>
    </div>

    [/html]

    ul以下を#loadAreaに表示します。

    簡単ですよね?

    jQuery.ajax()

    jQueryでAjaxをやるときの親玉的存在です。
    .load()のような手軽さは無いですが、色々細かい設定ができます。

    [js]
    $.ajax({
    url: /hoge/,
    context:this,
    success:function(loadData){
    var dataDom = $(loadData);
    $(‘#hoge’, dataDom).appendTo("#loadArea");
    },
    error:function(){
    $("#loadArea").html("エラーが発生しました");
    }
    });
    [/js]

    loadDataには、取得したテキストデータが格納されています。

    また、jQuery1.5から
    [js]
    $.ajax({ url: "/hoge/" })
    .success(function() {console.log("success");})
    .error(function() {console.log("error"); })
    .complete(function() {console.log("complete");});
    [/js]

    のような書き方ができるようになったみたいです。解りやすいですねー。
    また、xmlとかもdataTypeを指定するととってこれるので、他のAPIとかとの連携も楽ちんです。

    jQueryを使うとAjaxとかが、思いの外簡単にできてしまいます。これであなたも楽しいAjaxライフを満喫できること間違いなし!

  • jQuery.uploadでアップロード画像のサムネイルの作成

    Ajaxを使ったメールフォームとかってやっぱり素敵ですよね。
    以前仕事で写真投稿付きのフォームを作らざるを得なかったので、どうせならということでAjax化しました。
    というわけでjQuery.uploadを使って写真をアップロードして、サムネイルを表示するチュートリアルです。

    2011-12-03追記:デモ作りました。jQuery.uploadを使ったフォームのデモを作りました。

    (さらに…)

  • jQuery hashchange eventを使ったテーマ。

    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とか色々混在していて見づらいソースですが、そこはご愛敬ということで、ご勘弁下さい。徐々に直していこうと思いますので。

  • jQuery hashchange event を使ってみた。

    昨日やっていた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って言うんですね。知らなかった。というか、名前がわからないからどう調べていいかわからなかったという。。。

  • Lightboxをいろいろ試してみた。

    僕が運営するサイトのリニューアルにLightboxでスライドショーを作ったり、いろいろしたかったので、たくさんスクリプトを試してみた。


    Lightbox2

    定番です。

    Shadowbox

    設置方法はコチラに。
    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じゃないとダメらしい。

    Multibox

    これもFlash等に対応してて使いやすい。

    何故かPHPと一緒に使うと、いらないスクロールバーがfirefoxとOperaで出て断念しましたが。

    スライドショーのグループ化?的な事が出来ないのがちょっと難点。アニメーションはとても綺麗。

    Fancybox

    軽い。Jquery系。Youtube等も読める。

    prettyPhoto a jQuery lightbox clone

    Jquery系。角が丸いのがオサレ(笑)
    コチラもかなりたくさんの形式に対応しております。若干重い気もしますが。

    とりあえず、ShadowBoxが使えれば大体OKなんじゃないかと、思ってみたり。