前提・実現したいこと
JavascriptかjQueryを用いて、オブジェクトのサイズを変更させつつ、指定した方向に移動させたいです。
現段階では、ボタンをクリックすると指定した場所に画像を表示させることができています。
上記の画像のボタン部分をクリックすると、赤の丸が緑の丸の部分へ、緑の丸が黄色の丸の部分へ、黄色の丸が赤の丸の部分へ移動します。
これを、大きさを変えつつ、指定した場所へ移動させたいです。
おそらく、指定場所の座標を取得して、サイズを変更しつつ移動させるのだと思いますが、どう手を付けて良いか全く分からない状態です。
何卒、ご回答の程よろしくお願いいたします。
javascript
1window.onload = function(){ 2 photo_change(); 3}; 4 5function photo_change(){ 6 var btn = document.getElementById("next-btn"); 7 btn.onclick = function(){ 8 var photos = document.getElementsByClassName("photos") 9 for (var i = 0; i < photos.length; i++) { 10 var next_num = photos[i].src[59] - 1; 11 next_num = parseInt(next_num) 12 if(next_num == 0){ 13 next_num = 3; 14 }; 15 photos[i].src = "images/photo"+next_num+".jpg"; 16 }; 17 }; 18}
###補足
皆様、ご回答ありがとうございます。
説明不足で申し訳ありません。
見にくく、無駄のあるコードかと思いますが、記載しました。
流れとしては、黒いボタンを押す→photo_changeが起動する→それぞれの画像のパスの番号(59番目)を取得する→次の表示領域に画像を移動させる
となっています。
座標の取得と移動、サイズの変更等はまだ試しておりません。
そもそもタイトルに示したことが実現できるのかどうかも分かりませんでしたので、質問させていただきました。
何をどうしたいのかというと、指定した場所へのスムーズな移動とそれに伴うサイズ変更です。
具体的には、赤の丸を緑の丸がある場所へサイズを変更しながら移動(緑の丸を黄色の丸がある場所へサイズを変更しながら移動、黄色の丸をサイズを変更しながら赤い丸がある場所へ移動)といった感じのサイクルを、黒ボタンを押すごとに実現させたいです。
このような説明で大丈夫でしょうか...?
分かりにくくて申し訳ございません。
何卒、ご回答の程よろしくお願いいたします。
###試したこと
プログラミングを始めてまだ1週間ちょっとなので、本当に無駄が多いコードだと思います...。
見にくくて申し訳ございません。
一応、それぞれのオブジェクトの座標を取得し、サイズ変更することはできました。
しかし、オブジェクト間の距離を測ってから移動させることができません。
JavaScript
1function Test(){ 2 var btn = document.getElementById("next-btn"); 3 btn.onclick = function(){ 4 //3つの円を取得 5 var photos = document.getElementsByClassName("photos") 6 //サイズ変更と移動のための変数を初期化 7 var now_width = []; //幅 8 var next_width = []; 9 var now_height = []; //高さ 10 var next_height = []; 11 var now_pos_obj = []; //座標オブジェクト 12 var next_pos_obj = []; 13 var now_left = []; //画面左からの距離 14 var next_left = []; 15 var now_top = []; //画面上からの距離 16 var next_top = []; 17 var distance_x = []; //自分自身と次に移動すべきオブジェクト間の距離 18 var distance_y = []; 19 20 //クリック時の座標を取得 21 //自分自身の座標と次に移動すべきオブジェクトの座標を取得 22 for (var i = 0; i < photos.length; i++) { 23 var next_num = i + 1; 24 if(next_num == 3){ 25 next_num = 0; 26 }; 27 28 now_pos_obj.push(photos[i].getBoundingClientRect()); 29 next_pos_obj.push(photos[next_num].getBoundingClientRect()); 30 }; 31 32 //移動に必要な情報を取得 33 for(var j = 0; j < 3; j++){ 34 //次のサイズを取得 35 next_width.push(next_pos_obj[j].width.toString()); 36 next_height.push(next_pos_obj[j].height.toString()); 37 38 //距離を求めるための値を取得 39 now_left.push(now_pos_obj[j].left); 40 next_left.push(next_pos_obj[j].left); 41 now_top.push(now_pos_obj[j].top); 42 next_top.push(next_pos_obj[j].top); 43 }; 44 45 //現在地から次の目的地までの距離を算出 46 for(var k = 0; k < 3; k++){ 47 //横方向 48 distance_x.push((next_left[k] - now_left[k]).toString()); 49 //縦方向 50 distance_y.push((next_top[k] - now_top[k]).toString()); 51 52 //それぞれのオブジェクトをサイズ変更&移動させる 53 //******************************移動部分が上手くいかない****************************** 54 for(var l = 0; l < 3; l++){ 55 $(photos[l]).animate({"top":distance_y[l]+"px", "left":distance_x[l]+"px", 56 "width":next_width[l]+"px", "height":next_height[l]+"px"}); 57 }; 58 };
現在はその場でそれぞれのオブジェクトのサイズが変わっているだけなのですが、
これと同時に(時計回りの順番で)移動させるにはどうしたら良いでしょうか?
例えば、一回目のクリック時(二枚目の写真)には赤を緑の位置へ、緑を黄色の位置へ、黄色を赤の位置へ移動させる感じです。
何卒、ご回答の程よろしくお願いいたします。
リストの中に値は格納されているのですが、サイズだけが変更されて、移動部分が動作しません。
そもそも、距離の計算方法が間違っているのでしょうか...?
回答1件
あなたの回答
tips
プレビュー