blog.yusukenakanishi.com

Category : jQuery

Saturday, March 13, 2010

初jQueryプラグイン!HTMLのスライド mukiSlide.js

Demoを見る

ファイルをダウンロード

jQueryのプレゼン用スライドプラグインをつくってみました。プラグインといっても何の設定も出来ませんが…。Demoを見てもらえば大体のことはわかると思います。一応以下にも説明をしておきますね。

必要なファイルを読み込む

<link rel="stylesheet" type="text/css" media="all" href="./css/default.css" />
<link rel="stylesheet" type="text/css" media="all" href="./css/base.css" />
<script type="text/Javascript" src="./js/lib/jquery.min.js"></script>
<script type="text/Javascript" src="./js/mukiSlide.js"></script>

base.cssを変えることで好きなデザインにすることが出来ます。でもmukiSlide.jsは触らない方がいいです。だって書いた本人もよくわかんないから…。

基本的なHTML

// プレゼンのタイトル
<div id="title">
    <h1>jQueryでプレゼン用のスライド作成</h1>
</div>
// ここから各ページ
<div id="content">
    // .sectionのかたまりが1ページ。.coverを指定すると表紙風のレイアウトになる。
    <div class="section cover">
        <h2>表紙タイトル</h2>
        <p>〜 リード文 〜</p>
    </div>
    <div class="section">
        <h2>ページタイトル</h2>
        <p>フォントの色などの細かな調整はCSS出できます。</p>
    </div>
</div>
// コピーライトなど
<address>右下に表示されます。</address>

特殊な動きを指定したい場合

<div class="section separate">
    <p>ここは先に表示<span>ここが後から表示</span>ここは先に表示</p>
</div>

「特殊な動き」についてはDemoを見てもらう方がはやいです。

推奨ブラウザ

  • Safari
  • Chrome
  • Firefox
  • Opera

操作方法

Demoにある右上メニューとキーボードでの操作ができます。

キーバインド
↑:最初のページへ
←:前のページへ
→, space:次のページヘ
↓:最後のページへ

説明は以上になります。とても簡単に書きましたがDemoを見て「ふーん、こんなこと出来るんだ。」とか「何をいまさら。」とかそんな感じでいいと思います。

プラグインデビューってことで僕にとっては記念すべき日です!?そしてこんな簡単なものを作るだけで、こんなにも嬉しかった日があったんだってこと忘れないようにしたいですね!

Tuesday, December 8, 2009

jQueryでフィルタリングをしてみる

Demoを見る

大分前にやったやつだけど、ネタが無いので書いておきます(以下に紹介するフィルタリングはfactory.yusukenakanishi.comでも使ってます)。元ネタはこちらにQuick and Easy Filtering with jQuery – Nettuts+。そのままやっても勉強にならないので自分なりに改良を。

HTML

<ul id="list">
    <li><a href="hoge" title="PHP HTML">PHP and HTML/XHTML</a></li>
    <li><a href="hoge" title="PHP">PHP</a></li>
    <li><a href="hoge" title="JavaScript HTML">JavaScript and HTML/XHTML</a></li>
    <li><a href="hoge" title="JavaScript">JavaScript and jQuery</a></li>
    <li><a href="hoge" title="JavaScript CSS">javascript and CSS</a></li>

    // 中略

</ul>

JavaScript

$(function(){
    // フィルタリングのメニュー
    var filteringMenu = '<ul id="filtering"> <li class="selected"><a href="#New">最新の10件<\/a><\/li> <li><a href="#ALL">ALL<\/a><\/li> <li><a href="#HTML">HTML/XHTML<\/a><\/li> <li><a href="#CSS">CSS<\/a><\/li> <li><a href="#JavaScript">JavaScript<\/a><\/li> <li><a href="#jQuery">jQuery<\/a><\/li> <li><a href="#PHP">PHP<\/a><\/li> <\/ul>'
    $('#list').before(filteringMenu);

    // #list liのtitle属性にALLを追加
    $('#list li a').each(function(){
        $(this).attr('title',$(this).attr('title')+' ALL');
    });

    // 最初に10件のみ表示させる
    $('#list li').hide();
    $('#list li:lt(10)').fadeIn('slow').removeClass('odd').filter(':odd').addClass('odd');

    // フィルタリング
    $('#filtering li a').click(function() {
        $('#filtering li').removeClass('selected');
        $(this).parent('li').addClass('selected');
        $('p.notes').remove();

        var filterTitle = $(this).attr('href').replace(/#/, '');

        // Newの場合は最新の10件だけを表示
        if (filterTitle == 'New') {
            $('#list li').hide();
            $('#list li:lt(10)').fadeIn().removeClass('odd').filter(':odd').addClass('odd');
        }
        else {
            // この条件に合うものを表示する
            $('#list li').hide().filter(function () {
                var listTitle = $(this).children('a').attr('title');
                var filterList = listTitle.indexOf(filterTitle);
                if (filterList >= 0) {
                    return filterTitle;
                }
            }).fadeIn().removeClass('odd').filter(':odd').addClass('odd');
            // 該当するものが何も無いときにメッセージを表示する
            if (filterList = $('#list li:visible').length == 0) {
                $('#list').before('<p class="notes">0件:該当するものがありません。<\/p>');
                $('p.notes').hide().fadeIn();
            }
        }
        return false;
    });
});

JavaScriptがOFF環境の時フィルタリングするメニューがあっても何の意味もなさないため、わざとJavaScriptで書き出すようにしています。元ネタではclass属性をフィルタリングしてるんだけど僕は何となくtitle属性に変えました。そして該当するものが無いときは何も無いとメッセージを表示させてます。

ここの書き方ダサいよとかあったら教えてくださいな。

Friday, August 21, 2009

jQueryでRSSを取得しリストで表示

Demoを見る

とある勉強会でnoriさんからjQueryを使ってRSSを取得しXMLをパース、そしてリストで表示させるという夏休みの?宿題があったのでやってみました。自分の中でRSSが同じドメインにある場合とRSSが同じドメインにない場合(JavaScriptはセキュリティの関係上、ドメインが違うファイルを読込む事は出来ない仕様になっています。)を想定して作ってみました。

同じドメインにある場合

Demoで読み込んでいるのはこのxmlファイルです。以下JavaScriptのソースにある$.ajax(options)の詳しい内容についてはjQuery日本語リファレンスなどで確認して下さい。

HTML

//head内にjQueryを
<script type="text/Javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

//body内にリスト表示させる場所を作ってあげる
<div id="list-01">
    <!-- ここにフィードの内容が表示される -->
</div>

JavaScript

$(function(){
        //RSSが同じドメインにある場合
        $.ajax({
            //同じドメインにあるXMLファイルのある場所を指定してあげる
            url: 'rss.xml',
            //非同期通信
            async: true,
            //通信結果をキャッシュしない
            cache: false,
            dataType: "xml",
            success: function(xml){
                $(xml).find('item').each(function(i){
                    if (i == 10) {
                        return false;
                    }
                    var title = $(this).find('title').text();
                    var url = $(this).find('link').text();
                    var date = $(this).find('pubDate').text();
                    //月表示を数字表示に変換する
                    date = dateChanger(date);
                    //idがlist-01の箇所にリストで書き出す
                    $('#list-01').append('<li>' + date + '<a href="' + url + '">' + title + '<\/a><\/li>');
                });
                //idがlist-01にあるliをolで括る
                $('#list-01 li').wrapAll('<ol><\/ol>');
            },
            //エラー表示
            error: function(xml){
                $('#list-01').append('<p>Feedの読み込みに失敗しちゃいました。<\/p>');
            }
        });
        //月表示を数字表示に変換する
        var dateChanger = function(str){
            var mydate = new Date(str);
            yy = mydate.getFullYear();
            mm = mydate.getMonth() + 1;
            dd = mydate.getDate();
            if (mm < 10) { mm = "0" + mm; }
            if (dd < 10) { dd = "0" + dd; }
            datestr = yy + "年" + mm + "月" + dd + "日";
            return datestr;
        };
});

同じドメインにない場合

Demoで読み込んでいるのはこのxmlファイルです。外部RSSなので上記のような形では読み込んで来れません。そこでRSSフィード解析用に使ったのはjFeedというプラグインです。ダウンロードしてきたファイルの中でいるのはjquery.jfeed.jsとproxy.phpの2つ。

※セキュリティの問題上、proxy.phpにURLを埋め込むという従来とは違う方法をとっています。

HTML

//head内にjQueryとjFeedを
<script type="text/Javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="./jquery.jfeed.js"></script>

//body内にリスト表示させる場所を作ってあげる
<div id="list-02">
    <!-- ここにフィードの内容が表示される -->
</div>

JavaScript

$(function(){
//RSSが同じドメインにない場合
    $.getFeed({
        //本来はここにRSSのURLを指定する。僕はセキュリティの問題上proxy.phpにURLを埋め込んだので以下の通りに
        url: 'proxy.php',
        success: function(feed){
            var html = '';
            for(var i = 0; i < feed.items.length && i < 10; i++){
                var item = feed.items[i];
                html += '<li>' + dateChanger(item.updated) + '<a href="' + item.link + '">' + item.title + '<\/a><\/li>';
            }
            $('#list-02').append(html);
            $('#list-02 li').wrapAll('<ol><\/ol>');
        }
    });
    //月表示を数字表示に変換する
    var dateChanger = function(str){
        var mydate = new Date(str);
        yy = mydate.getFullYear();
        mm = mydate.getMonth() + 1;
        dd = mydate.getDate();
        if (mm < 10) { mm = "0" + mm; }
        if (dd < 10) { dd = "0" + dd; }
        datestr = yy + "年" + mm + "月" + dd + "日";
        return datestr;
    };
});

proxy.php

$handle = fopen($_REQUEST['url'], "r");

proxy.phpにURLを埋め込んだ方がセキュリティ上良いようなので僕は上記の部分を下記に。

$handle = fopen('http://labs.yusukenakanishi.com/feed/', "r");

どちらの場合も作ってみると比較的簡単に行くようですね。僕?もちろん出来るまで苦労しました。。rewさんwonderさんのお陰ですー><