ウィンドウのリサイズ時に、少し遅れて画像を移動させたりするためのタイマー処理のメモです。
「resize」の部分を「scroll」にすれば、スクロール時のタイマー処理になります。
|
var timer; var delay = 100;//遅延時間(ミリ秒) $(window).resize(function() { if (timer) { clearTimeout(timer); } timer = setTimeout(onTimer, delay); }); function onTimer() { //処理 } |
デザインをカスタマイズできる、jQueryのプラグイン「jScrollPane」でスクロールバーを簡単に設置する際のメモです。
サンプルはこちら
設置にはjQuery本体と、jScrollPaneプラグインにマウスホイール用のプラグインをあらかじめ読み込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Scroll Panel</title> <link rel="stylesheet" type="text/css" href="common/css/style.css" media="all" /> <script type="text/javascript" src="common/js/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="common/js/jquery.mousewheel.js"></script> <script type="text/javascript" src="common/js/jquery.jscrollpane.min.js"></script> <script type="text/javascript"> $(function() { $("div.scroll-pane").jScrollPane({animateScroll:true, verticalGutter:0}).data("jsp"); }); </script> </head> <body> <div id="content" class="scroll-pane"> <p>ここにテキストなどのコンテンツを記述します。</p> </div><!-- content --> </body> </html> |
スタイルシートは最小限のみを記述しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
div.jspContainer { position: relative; overflow: hidden; } div.jspPane { position: absolute; } div.jspVerticalBar { position: absolute; width: 10px; height: 100%; top: 0px; right: 0px; background-color: #e6e6e6; } div.jspVerticalBar * { margin: 0px; padding: 0px; } div.jspCap { display: none; } div.jspTrack { position: relative; } div.jspDrag { position: relative; left: 0px; top: 0px; cursor: pointer; background-color: #808080; } div.scroll-pane { width: 500px; height: 250px; overflow: auto; } |
jScrollPane
Firefox上でjQueryで記述した処理が、実行されない場合の対処法です。
jQueryの「.ready()」ステートメントで書き始める処理が、Firefoxの場合に限り動作しないケースがたまにあります。
原因ははっきりとは分かりませんが、特にDrupal上で記述すると、よくこの症状に遭遇します。
なので暫定的な対処法として、次のように書くようにしています。
|
$(document).ready(function() { $(window).bind("load", function() { //ここに処理を書きます }); }); |
「.bind()」を入れ子にして、ウィンドウの要素を全て読み込んだ段階で処理を実行するようにします。
Firefoxの場合だけ起こるというのが、やや不可解ではありますけど。
jQueryを使って、ウィンドウサイズに合わせて画像を拡大縮小し、全面に表示する方法です。
画像の縦横比率は保ったままに、ウィンドウの全面を覆うように拡大縮小を行っています。ウィンドウのリサイズの際には、画像もアニメーションでリサイズします。
サンプルはこちら
HTMLファイル内では、画像全面表示のための関数の実行と、ウィンドウリサイズ時の処理を記述しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Adjust Image</title> <link rel="stylesheet" type="text/css" href="common/css/reset.css" media="all" /> <link rel="stylesheet" type="text/css" href="common/css/style.css" media="all" /> <script type="text/javascript" src="common/js/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="common/js/jquery.easing-1.3.min.js"></script> <script type="text/javascript" src="common/js/functions.js"></script> <script type="text/javascript"> $(function() { var time = 1000; var time_resize = null; var image = $("div#image"); $(window).bind("load", function() { adjustImage(image, 0); $(window).resize(function() { if (time_resize) { clearTimeout(time_resize); } time_resize = setTimeout(function() {adjustImage(image, time)}, 100); }); }); }); </script> </head> <body> <div id="image"> <div class="inner"> <img src="images/image.jpg" alt="" /> </div><!-- inner --> </div><!-- image --> </body> </html> |
外部JavaScriptファイル「functions.js」に、画像全面表示のための関数を記述しています。
ウィンドウを覆い尽くすように画像サイズを拡大縮小して、センター表示にしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
function adjustImage(image, time) { var image_width = image.find("img").width(); var image_height = image.find("img").height(); var width = 0; var height = 0; var margin_left = 0; var margin_top = 0; var ratio_outer = $(window).width()/$(window).height(); var ratio_inner = image_width/image_height; if (ratio_outer > ratio_inner) { width = $(window).width(); height = width/ratio_inner; } else { height = $(window).height(); width = height*ratio_inner; } margin_left = Math.floor(($(window).width()-width)/2); margin_top = Math.floor(($(window).height()-height)/2); image.find("img").animate({width:width, height:height}, {duration:time, easing:"easeOutQuart"}); image.animate({top:margin_top, left:margin_left}, {duration:time, easing:"easeOutQuart"}); } |
画像表示のためのCSSの箇所は次のようになっています。
|
div#image { position: fixed; overflow: hidden; } div#image div.inner { position: relative; } |
テキストフィールドや、ラジオボタンなど、フォーム項目の内容が変更された時に処理を行うための、jQueryによるイベントのまとめです。
サンプルはこちら
フォームは次のように、テキストフィールド、テキストエリア、ラジオボタン、チェックボックス、セレクトボックスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
<form> <!-- テキストフィールド --> <input type="text" id="text" name="text" value="" /> <hr /> <!-- テキストエリア --> <textarea id="textarea" name="textarea"></textarea> <hr /> <!-- ラジオボタン --> <label for="radio-01"><input type="radio" id="radio-01" name="radio" value="1" />ラジオ1</label> <label for="radio-02"><input type="radio" id="radio-02" name="radio" value="2" />ラジオ2</label> <label for="radio-03"><input type="radio" id="radio-03" name="radio" value="3" />ラジオ3</label> <hr /> <!-- チェックボックス --> <label for="checkbox-01"><input type="checkbox" id="checkbox-01" name="checkbox" value="1" />チェックボックス1</label> <label for="checkbox-02"><input type="checkbox" id="checkbox-02" name="checkbox" value="2" />チェックボックス2</label> <label for="checkbox-03"><input type="checkbox" id="checkbox-03" name="checkbox" value="3" />チェックボックス3</label> <hr /> <!-- セレクトボックス --> <select name="test[select]" id="select"> <option value="1">セレクト1</option> <option value="2">セレクト2</option> <option value="3">セレクト3</option> </select> <hr /> </form> |
上記のフォーム項目ごとに、内容が変更された時にイベントを取得して、別のDIVタグ内に変更内容を表示するようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
$(function() { //テキストフィールド $("input#text").keyup(function() { $("div#value-text span").text($(this).val()); }); //テキストエリア $("textarea#textarea").keyup(function() { $("div#value-textarea span").text($(this).val()); }); //ラジオボタン $("input[name='radio']:radio").change(function() { $("div#value-radio span").text($(this).val()); }); //チェックボックス $("input[name='checkbox']:checkbox").click(function() { var array = new Array(); $("input[name='checkbox']:checked").map(function() { array.push($(this).val()); }); $("div#value-checkbox span").text(array.toString()); }); //セレクトボックス $("select#select").change(function() { $("div#value-select span").text($(this).val()); }); }); |
テキストエリア、テキストボックスは、キーボードが押された時に、ラジオボタン、セレクボトックスは選択が変更された時に、チェックボックスはいずれかのチェックボックスが押された時にそれぞれイベントを取得しています。
変更内容の確認のための各DIVは、次のように記述しています。
|
<div id="value-text">テキストフィールドの値:<span></span></div> <div id="value-textarea">テキストエリアの値:<span></span></div> <div id="value-radio">ラジオボタンの値:<span></span></div> <div id="value-checkbox">チェックボックスの値:<span></span></div> <div id="value-select">セレクトボックスの値:<span></span></div> |