HOME>WEBプログラム覚書>[Javascript]複数の手続きなどのパターンを分かりやすく見せる

[Javascript]複数の手続きなどのパターンを分かりやすく見せる

なんか楽でいい方法ないかなと久しぶりにライブラリ利用せず書いてみました。

jQueryのやさしさに包まれたならきっとeach気分でfor..in使ってバグだらけ。そしてPHPのやさしさにも包まれていたためinArray()的なものが無いことに動揺。

ライブラリのやさしさと忘却のスピードがとんでもないことを実感しました。

実行結果



Javascript

Javascript

  1. (function(){
  2.     var imgSwitch = window.imgSwitch = function(id, radio, img_path) {
  3.  
  4.         var self = this;
  5.         // IEのset/getAttribute対策
  6.         this.class_name = (document.documentElement.getAttribute("style") == document.documentElement.style)
  7.                           ? 'className'
  8.                           : 'class';
  9.  
  10.         this.wrapper = document.getElementById(id);
  11.         this.radios = [];
  12.  
  13.         // 画像のエリア
  14.         this.img_erea = document.createElement('div');
  15.         this.img_erea.setAttribute(this.class_name, 'imgErea');
  16.  
  17.         // ラジオボタンのグループ
  18.         this.radioBtn = function(radio_collection, default_checked) {
  19.             var my = this;
  20.             this.target;
  21.  
  22.             for (var i=0; i<radio_collection.length; i++) {
  23.                 radio_collection[i].onclick = function() {
  24.                     my.target = this;
  25.                     self.imgChange(this.name);
  26.                 }
  27.  
  28.                 if (i === default_checked) {
  29.                         radio_collection[i].checked = true;
  30.                         this.target = radio_collection[i];
  31.                 }
  32.             }
  33.         }
  34.  
  35.         this.radioBtn.prototype = {
  36.             getValue: function(){
  37.                 return this.target.value;
  38.             },
  39.  
  40.             getName: function(){
  41.                 return this.target.name;
  42.             },
  43.  
  44.             getImgname: function(){
  45.                 return this.getName() + '/' + this.getValue();
  46.             }
  47.         }
  48.  
  49.         /**
  50.          * ボタンクリック時に画像を差し替え
  51.          *
  52.          */
  53.         this.imgChange = function(class_name) {
  54.             var p = this.img_erea.getElementsByTagName('p');
  55.             for (var i=0; i<p.length; i++) {
  56.                 if (p[i].getAttribute(this.class_name) == class_name) {
  57.                     p[i].getElementsByTagName('img').item(0).setAttribute('src', img_path + radios[i].getImgname() + '.gif');
  58.                 }
  59.             }
  60.         }
  61.  
  62.        /**
  63.         * 初期化用の関数
  64.         *
  65.         */
  66.         this.init = function() {
  67.             var p;
  68.             var img;
  69.             var attr;
  70.  
  71.             for (var i=0; i<this.radios.length; i++) {
  72.                 p = document.createElement('p');
  73.                 p.setAttribute(this.class_name, radios[i].getName());
  74.  
  75.                 img = document.createElement('img');
  76.                 img.setAttribute('src', img_path + radios[i].getImgname() + '.gif');
  77.  
  78.                 p.appendChild(img);
  79.                 this.img_erea.appendChild(p);
  80.             }
  81.             this.wrapper.appendChild(this.img_erea);
  82.         }
  83.  
  84.         for (var key in radio) {
  85.             this.radios.push(new this.radioBtn(document.getElementsByName(key), radio[key]));
  86.         }
  87.  
  88.         this.init();
  89.     }
  90. })();
  91.  
  92. onload = function() {
  93.     // グループ:デフォルトチェックのindex番号
  94.     var value_img = {step1: 0, step2: 1, step3: 2};
  95.     /**
  96.      * 第三引数は表示画像のパス
  97.      * 上記パスとradioボタンのname valueを利用
  98.      *
  99.      * パス/name/value.gif
  100.      */
  101.     imgSwitch('imgSwitch', value_img, '/storage/pg/sample/radiobutton/img/');
  102. }
  103.  

HTML

HTML

  1. <div id="imgSwitch">
  2.     <div class="ctrlPanel">
  3.         <label>輸入国</label>
  4.         <label><input type="radio" name="step1" value="img1" />インドネシア</label>
  5.         <label><input type="radio" name="step1" value="img2" />メキシコ</label>
  6.         <label><input type="radio" name="step1" value="img3" />インド</label>
  7.  
  8.         <hr />
  9.  
  10.         <label>輸送方法</label>
  11.         <label><input type="radio" name="step2" value="img1" />海運</label>
  12.         <label><input type="radio" name="step2" value="img2" />空輸</label>
  13.         <label><input type="radio" name="step2" value="img3" />陸路</label>
  14.  
  15.         <hr />
  16.  
  17.         <label>通関業者</label>
  18.         <label><input type="radio" name="step3" value="img1" />A社</label>
  19.         <label><input type="radio" name="step3" value="img2" />B社</label>
  20.         <label><input type="radio" name="step3" value="img3" />C社</label>
  21.     </div>
  22. </div>
  23.  

CSS

CSS

  1. #imgSwitch .imgErea {
  2.     width: 500px;
  3.     height: 500px;
  4.     position: relative;
  5. }
  6.  
  7. #imgSwitch .imgErea p {
  8.     position: absolute;
  9.     top: 0px;
  10.     left: 0px;
  11. }
  12.  
  13. #imgSwitch .imgErea p.step1 {
  14.     z-index: 10;
  15. }
  16.  
  17. #imgSwitch .imgErea p.step2 {
  18.     z-index: 20;
  19. }
  20.  
  21. #imgSwitch .imgErea p.step3 {
  22.     z-index: 30;
  23. }
  24.  

全然楽にはなってないですね。結局面倒なのは画像だよなぁ・・・なんとかならないかな。 ホームページの見せ方じゃなくてその業務フローをまずなんとかしろよと言えたらどんなに楽か・・・w

投稿日 2010年4月15日 04:42
カテゴリ JavaScript
タグ サンプルコード
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1206

コメント

コメントする
Name
Email Address
URL