Javascript:javascriptで配列の中身をランダムに並び替える

Javascript配列の中身をランダム並び替える方法をメモします。

sort()メソッドを使用することで配列の順番を並び替えることができます。
引数がない場合はアルファベット順でソートされます。

今回はsort()メソッドに無名関数を指定し、random()メソッドで生成した値に
‘0.5’を引いた値で配列の順番をソートしています。


img.sort(
	function() {
		return Math.random() - 0.5;
	}
);

正の値、負の値、0で比較し配列を並び替えます。

下記は画像をランダムに並べ替えて表示した際の方法です。


複数の画像をランダム表示

javascript,jQuery

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){

        // 配列を設定
        var img = new Array("img1.jpg", "img2.jpg", "img3.jpg");

        // 配列の中身をランダムに並び替える
        img.sort(
            function() {
                return Math.random() - 0.5;
            }
        );

        // 配列をループさせ、imgタグを出力
        for(i = 0; i < img.length; i++) {
            $("div#hoge").append('<img src="img/' + img[i] + '" />');
        }

    });
</script>

HTML

<div id="hoge"></div>

Javascript:javascriptで配列に値を格納する

javascript配列に値を格納する方法はいくつかあります。
いつも忘れてしまうので、それぞれの格納方法をメモします。


配列の初期値を設定する場合

配列を生成し、配列の値を設定する方法です。

var arr = new Array("a", "b", "c", "d", "e");

又は下記のように設定します。

var arr = ["a", "b", "c", "d", "e"];

配列の要素に値を格納

var arr = new Array();
arr[0] = "a";
arr[1] = "b";
arr[2] = "c";
arr[3] = "d";
arr[4] = "e";

※要素を指定して格納する場合、配列を生成する必要があります。


push()メソッドを使用し値を追加

push()メソッドを使用すると配列の一番最後に値が追加されます。

var arr = new Array();
arr.push("a");
arr.push("b");
arr.push("c");
arr.push("d");
arr.push("e");

※要素を指定して格納する場合、配列を生成する必要があります。


jQuery:FancyBox2を使用したLightbox風な表示

前回は「FancyBox1.3.4」を使用した際の使い方を書きましたが、
今回はFancyBox2の使い方をメモします。

FancyBox2ではヘルパーがあり、色々と機能を追加することができるようです。
また、FancyBox2では「jQuery1.9」でも動作します。

下記のリンク先でダウンロードできます。

FancyBox2

FancyBox2は商用以外で使用するのは無料ですが、
商用で利用する場合は有料になります。


FancyBox2の使い方

※バージョンは「FancyBox2.1.4」です。

読み込みファイル

<!-- jQuery -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<!-- FancyBox -->
<script type="text/javascript" src="./fancybox/jquery.fancybox.js?v=2.1.4"></script>
<link rel="stylesheet" type="text/css" href="./fancybox/jquery.fancybox.css?v=2.1.4" media="screen" />

・マウスホイールイベントを使用する場合

<!-- mousewheel(追加しなくてもOK) -->
<script type="text/javascript" src="./js/jquery.mousewheel-3.0.6.pack.js"></script>

・ボタンヘルパーを使用する場合

<!-- Button helper -->
<link rel="stylesheet" type="text/css" href="./fancybox/helpers/jquery.fancybox-buttons.css?v=1.0.5" />
<script type="text/javascript" src="./fancybox/helpers/jquery.fancybox-buttons.js?v=1.0.5"></script>

・サムネイルヘルパーを使用する場合

<!-- Thumbnail helper -->
<link rel="stylesheet" type="text/css" href="./fancybox/helpers/jquery.fancybox-thumbs.css?v=1.0.7" />
<script type="text/javascript" src="./fancybox/helpers/jquery.fancybox-thumbs.js?v=1.0.7"></script>

・メディアヘルパーを使用する場合

<!-- Media helper -->
<script type="text/javascript" src="./fancybox/helpers/jquery.fancybox-media.js?v=1.0.5"></script>

○デフォルト

「data-fancybox-group=””」に同じ値を記述すると、グループ化されます。
「title=””」に記載した場合はタイトルが出力されます。

jQuery

<script type="text/javascript">
    $(document).ready(function() {
        $('.fancybox').fancybox();
    });
</script>

HTML

<a class="fancybox" href="./img/sample1_b.jpg" data-fancybox-group="group" title=""><img src="./img/sample1_s.jpg" alt="" /></a>
<a class="fancybox" href="./img/sample2_b.jpg" data-fancybox-group="group" title=""><img src="./img/sample2_s.jpg" alt="" /></a>
<a class="fancybox" href="./img/sample3_b.jpg" data-fancybox-group="group" title=""><img src="./img/sample3_s.jpg" alt="" /></a>
<a class="fancybox" href="./img/sample4_b.jpg" data-fancybox-group="group" title=""><img src="./img/sample4_s.jpg" alt="" /></a>

○ボタンヘルパー(Button helper)を使用した場合

fancybox_1

画面上部に操作する用のボタンが表示されます。

jQuery

<script type="text/javascript">
    $(document).ready(function() {
        $('.fancybox-buttons').fancybox({
            openEffect  : 'none',
            closeEffect : 'none',

            prevEffect : 'none',
            nextEffect : 'none',

            closeBtn  : false,

            helpers : {
                title : {
                    type : 'inside'
                },
                buttons    : {}
            },

            afterLoad : function() {
                this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
            }
        });
    });
</script>

HTML

<a class="fancybox-buttons" data-fancybox-group="button" href="./img/sample1_b.jpg"><img src="./img/sample1_s.jpg" alt="" /></a>
<a class="fancybox-buttons" data-fancybox-group="button" href="./img/sample2_b.jpg"><img src="./img/sample2_s.jpg" alt="" /></a>
<a class="fancybox-buttons" data-fancybox-group="button" href="./img/sample3_b.jpg"><img src="./img/sample3_s.jpg" alt="" /></a>
<a class="fancybox-buttons" data-fancybox-group="button" href="./img/sample4_b.jpg"><img src="./img/sample4_s.jpg" alt="" /></a>

○サムネイルヘルパー(Thumbnail helper)を使用した場合

fancybox_2

画面下部に画像を切り替えるためのサムネイル画像が表示されます。

jQuery

<script type="text/javascript">
    $(document).ready(function() {
        $('.fancybox-thumbs').fancybox({
            prevEffect : 'none',
            nextEffect : 'none',

            closeBtn  : false,
            arrows    : false,
            nextClick : true,

            helpers : {
                thumbs : {
                    width  : 50,
                    height : 50
                }
            }
        });
    });
</script>

HTML

<a class="fancybox-thumbs" data-fancybox-group="thumb" href="./img/a_b.jpg"><img src="./img/a_s.jpg" alt="" /></a>
<a class="fancybox-thumbs" data-fancybox-group="thumb" href="./img/b_b.jpg"><img src="./img/b_s.jpg" alt="" /></a>
<a class="fancybox-thumbs" data-fancybox-group="thumb" href="./img/c_b.jpg"><img src="./img/c_s.jpg" alt="" /></a>

○メディアヘルパー(Media helper)を使用した場合

ローカル環境では実行されません。
サーバにアップした場合に実行されます。

YoutubeやVimeo、Instagramなどを表示することができます。

jQuery

<script type="text/javascript">
    $(document).ready(function() {
        $('.fancybox-media').attr('rel', 'media-gallery').fancybox({
            openEffect : 'none',
            closeEffect : 'none',
            prevEffect : 'none',
            nextEffect : 'none',

            arrows : false,
            helpers : {
                media : {},
                buttons : {}
            }
        });
    });
</script>

HTML

<a class="fancybox-media" href="http://www.youtube.com/watch?v=oJHfKAQfyN0">Youtube</a>
<a class="fancybox-media" href="http://instagram.com/p/xxxxxxxxxx/">Instagram</a>

上記以外にもレイアウトやエフェクトなどを変更できたり、
IframeやAjax、Swfなどを出力できたりなど多機能なので使いやすいです。

jQuery:FancyBoxを使用し、Lightboxのように表示する

FancyBox1.3.4を使用した時の使い方をメモします。

FancyBoxLightboxのように表示するjQueryプラグインです。
下記のリンクよりダウンロードできます。

FancyBox


FancyBoxの使い方

共通で読み込むファイル

FancyBoxのスタイルシート、FancyBoxのJSファイル、jQueryなどの
ファイル等を読み込みます。

<link rel="stylesheet" type="text/css" href="/fancybox/jquery.fancybox-1.3.4.css" media="screen" />

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="/fancybox/jquery.fancybox-1.3.4.pack.js"></script>

※マウスホイールイベントを使用する場合は下記も読み込みます。

<script type="text/javascript" src="/fancybox/jquery.mousewheel-3.0.4.pack.js"></script>

○デフォルトの場合(オプションなし)

jQuery

<script type="text/javascript">
    $(document).ready(function() {
        $(".fancybox1").fancybox();
    });
</script>

HTML

<a class="fancybox1" href="./img/sample_b.jpg"><img alt="sample" src="./img/sample_s.jpg" /></a>

表示するものにタイトルを表示させる場合は、「title=””」に記載します。

<a class="fancybox1" href="./img/sample_b.jpg" title="タイトル"><img alt="sample" src="./img/sample_s.jpg" /></a>

○グループ化させる場合

「rel=””」にグループ化をする対象の物に同じ値を付けます。

jQuery

<script type="text/javascript">
    $(document).ready(function() {
        $(".fancybox2").fancybox({
            'cyclic'        : true
        });
    });
</script>

HTML

<a class="fancybox2" rel="group" href="./img/sample1_b.jpg" title=""><img alt="" src="./img/sample1_s.jpg" /></a>
<a class="fancybox2" rel="group" href="./img/sample2_b.jpg" title=""><img alt="" src="./img/sample2_s.jpg" /></a>
<a class="fancybox2" rel="group" href="./img/sample3_b.jpg" title=""><img alt="" src="./img/sample3_s.jpg" /></a>
<a class="fancybox2" rel="group" href="./img/sample4_b.jpg" title=""><img alt="" src="./img/sample4_s.jpg" /></a>

上記以外にもFancyBoxのエフェクトや背景、透過などのオプションが色々あるので、
サイトに合わせてカスタマイズできると思います。

また、「FancyBox1.3.4」は「jQuery1.9」で動作しなかったので「jQuery1.8」を使用しました。


CSS:CSSで画像の幅・高さの最大値を指定する

HTMLで画像を表示する場合、今まではimgタグに「width」、「height」を指定してました。

画像サイズが決まっているものに関しては問題ないのですが、
サイズが決まっていない画像を表示する場合は「width」・「height」を
指定していると画像が元のサイズから拡大や縮小してしまい、
きれいに表示されないことがあります。

CSSの「max-width」、「max-height」を使用すると画像の幅・高さ
最大値指定することができるので拡大・縮小せずに画像を
きれいに表示することができます。

下記に「max-width」、「max-height」の使用方法をメモします。


max-width

幅の最大値を指定します。

max-width: 100px;

max-height

高さの最大値を指定します。

max-height: 100px;

使用方法

CSS

div#hoge img {
	max-width: 300px;
	max-height: 300px;
}

HTML

<div id="hoge">
    <img src="/img/hoge.jpg" />
</div>

上記の方法を使用すると「max-width」、「max-height」で指定したサイズより小さい場合は
指定されません。
最大値に設定したサイズを超えた場合、指定したサイズに縮小され表示されます。

また、「min-width」、「min-height」を使用すれば、幅・高さの最小値を指定することができます。