決まった文字を入れるとBOXに入り違う文字が入ると元の位置に戻る、というようなページを作成したいです。
例えばドラッグ可能な選択肢が”上”、”下”、”中”、”右”、”左”とあり。
5つのBOXを用意しそれぞれ決まった文字しかドロップできないようにする。
例えばBOX1は”上”しかドロップできない、BOX2は”下”しかドロップできない、等
jQueryとUIを使用すれば可能かと思い、色々調べていたところ以下のサイトを見つけました。
https://plnkr.co/edit/Huo1VGFFC8xH7A9XkQWQ?p=pre …
上記ページは数字を決まった箇所に入れ、すべて正解するとウィンドウが表示されるのですが
日本語にしようとすると上手く動きませんでした。
①日本語でも動作するようにしたい
②ドロップ先のBOXの位置をそれぞれバラバラに動かせるようにしたい
上記の要件を満たすにはどのように修正すればいいでしょうか。
作成したコードは以下となります。
<!doctype html>
<html lang="en">
<head>
<title>Drag-and-Drop Number Cards Game</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5. …
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1. …
<script type="text/javascript">
var correctCards = 0;
$( init );
function init() {
// Hide the success message
$('#successMessage').hide();
$('#successMessage').css( {
left: '580px',
top: '250px',
width: 0,
height: 0
} );
// Reset the game
correctCards = 0;
$('#cardPile').html( '' );
$('#cardSlots').html( '' );
// Create the pile of shuffled cards
var numbers = [ '上', '下', '中', '右', '左' ];
numbers.sort( function() { return Math.random() - .5 } );
for ( var i=0; i<5; i++ ) {
$('<div>' + numbers[i] + '</div>').data( 'number', numbers[i] ).attr( 'id', 'card'+numbers[i] ).appendTo( '#cardPile' ).draggable( {
containment: '#content',
stack: '#cardPile div',
cursor: 'move',
revert: true
} );
}
// Create the card slots
var words = [ '上', '下', '中', '右', '左' ];
for ( var i=1; i<=5; i++ ) {
$('<div>' + words[i-1] + '</div>').data( 'number', i ).appendTo( '#cardSlots' ).droppable( {
accept: '#cardPile div',
hoverClass: 'hovered',
drop: handleCardDrop
} );
}
}
function handleCardDrop( event, ui ) {
var slotNumber = $(this).data( 'number' );
var cardNumber = ui.draggable.data( 'number' );
// If the card was dropped to the correct slot,
// change the card colour, position it directly
// on top of the slot, and prevent it being dragged
// again
if ( slotNumber == cardNumber ) {
ui.draggable.addClass( 'correct' );
ui.draggable.draggable( 'disable' );
$(this).droppable( 'disable' );
ui.draggable.position( { of: $(this), my: 'left top', at: 'left top' } );
ui.draggable.draggable( 'option', 'revert', false );
correctCards++;
}
var all_ingredients = [];
$('#cardSlots > div').each(function(i){
if($(this).hasClass('ui-droppable-disabled')){
var ingredient = $(this).text();
all_ingredients.push(ingredient);
}
});
console.log(all_ingredients);
// If all the cards have been placed correctly then display a message
// and reset the cards for another go
if ( correctCards == 5 ) {
$('#successMessage').show();
$('#successMessage').animate( {
left: '380px',
top: '200px',
width: '400px',
height: '100px',
opacity: 1
} );
}
}
</script>
</head>
<body>
<div id="content">
<div id="cardPile"> </div>
<div id="cardSlots"> </div>
<div id="successMessage">
<h2>正解!</h2>
<button onclick="init()">もう1回</button>
</div>
</div>
</body>
</html>
No.1ベストアンサー
- 回答日時:
こんばんは
>①については解決しました。
とのことなので・・
>②ドロップ先のBOXの位置をそれぞれバラバラに動かせるようにしたい
点線表示のカード状のものを、ドラッグできるようにしたいという意味でしょうか?
であるなら、①のカードと同様にdraggable()を設定しておけば良いです。
要素を生成して、droppable()設定の後に
.draggable({containment: '#cardSlots' });
などと続けておけば、ドラッグ可能になります。
ただし、上位要素を広げておかないと、ほとんど横移動しかできないかもしれませんけれど・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSでreadonlyの機能はあり...
-
フォーム要素を下から上にフェ...
-
スクリプト初心者なのですが、
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
Excelシート上のマクロを登録し...
-
VBA エンターキーでイベントに...
-
リストボックスの選択解除
-
メルカリのメルカードで買い物...
-
UPS警告音を止めたい
-
「PC Helpsoft Driver Updated...
-
エクセルの画面にユーザーフォ...
-
レジ返品交換について(時間がか...
-
UMLでの例外処理
-
switch の範囲指定
-
エクセルVBAで、MsgBox やInput...
-
【Excel】特定の文字を含むセル...
-
Loadイベント中にほかのイベン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
確認ダイアログを次からは表示...
-
CSSでreadonlyの機能はあり...
-
formのsubmitを押すとモーダル...
-
Q&A掲示板の入力フォームに文字...
-
JavascriptのHTMLクラス表示に...
-
JavaScriptのinnerHTMLの挙動に...
-
3重のクォーテーション
-
特定の条件のHTML要素を一括で...
-
クリックすると、色が変わるよ...
-
jQuery 画面サイズにスライド画...
-
折りたたみを全て開いて別ペー...
-
jqueryを使ったスムーススクロ...
-
2回目以降のページロード時には...
-
jQueryのSlickで矢印アイコンが...
-
Bootstrap Javascriptでモーダル
-
JavaScriptのdiv.style属性の変...
-
フォームで「パスワード(確認...
-
javascriptとcssでフォントサイ...
-
macかwinか判別しスタイルシー...
-
javascript htmlの追記について
おすすめ情報
①については解決しました。
②についてですが、cssのソースを一部ですが補足します。
/* Slots for final card positions */
#cardSlots {
margin: 50px auto 0 auto;
background: #ddf;
}
/* The initial pile of unsorted cards */
#cardPile {
margin: 0 auto;
background: #ffd;
}
#cardSlots, #cardPile {
width: 500px;
height: 120px;
padding: 20px;
border: 2px solid #333;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
/* Individual cards and slots */
#cardSlots div, #cardPile div {
float: left;
width: 50px;
height: 50px;
padding: 10px;
padding-top: 40px;
padding-bottom: 0;
border: 2px solid #333;
border-radius: 10px;
margin: 0 0 0 10px;
background: #fff;
text-align: center;
}
#cardSlots div:first-child, #cardPile div:first-child {
margin-left: 0;
}
#cardSlots div.hovered {
background: #aaa;
}
#cardSlots div {
border-style: dashed;
}
#cardPile div {
background: #666;
color: #fff;
font-size: 50px;
text-shadow: 0 0 3px #000;
}
#cardPile div.ui-draggable-dragging {
-moz-box-shadow: 0 0 .5em rgba(0, 0, 0, .8);
-webkit-box-shadow: 0 0 .5em rgba(0, 0, 0, .8);
box-shadow: 0 0 .5em rgba(0, 0, 0, .8);
}