私はJavascript/HTMLの初心者です。ですから、明らかな何かが欠けているとすみません。
私の仕事: 私のウェブサイトに写真を表示したいのですが、これはウェブサイトが読み込まれたり更新されたりしても常に同じです。その写真の隣に、「シャッフル」というボタンを実装したいと思います。このボタンは、最初に表示された画像を非表示にし、代わりに配列から選択されたランダムな画像を表示します。画像が変更された後、「シャッフル」ボタンが再びクリック可能になり、クリックされるたびに、配列からランダムに選択された新しい画像が表示されます。最初の最初の画像は、Webサイトが更新されたときにのみ再度表示されます。
私の問題: 「シャッフル」ボタンをクリックすると画像が変わりますが、ボタンやウェブサイトに表示されるはずのコードがすべて消えます。したがって、もう一度クリックすることはできません。新しいランダム画像の選択を繰り返すために、ボタンのオンクリックで選択される関数に配列を配置しました(私の問題はここにあると思います)。配列の周りでこの関数を削除すると、ボタンをクリックしても消えませんが、ボタンは2回以上クリックできません。この問題の写真は、この投稿の下部に含まれています。あなたが私の問題を理解し、私を助けてくれることを願っています。ありがとう!
コード:
<body>
<!-- button with functions:hide initial picture, select random picture, show random picture-->
<button onClick="hideNumber(); shuffle(); showMeme();">Shuffle</button>
<!--initial picture thats not random and always shown when page is loaded-->
<div>
<img id="number" src="images/zahl1.jpg" alt="Number">
</div>
<script type="text/javascript">
function hideNumber() {
var x = document.getElementById("number");
if (x.style.display == "none") {
} else {
x.style.display = "none";
}
}
//function so the button should be reclickable / array filled with pictures
function shuffle(){
var images1 = [],
index1 = 0;
images1[0] = "<div><img src='images/meme1.jpg' id='Meme1' style='visibility:hidden' alt='meme1'></div>";
images1[1] = "<div><img src='images/meme2.jpg' id='Meme1' style='visibility:hidden' alt='meme2'></div>";
images1[2] = "<div><img src='images/meme3.jpg' id='Meme1' style='visibility:hidden' alt='meme3'></div>";
//selecting random number
index1 = Math.floor(Math.random() * images1.length);
//displaying random image out of array
document.write(images1[index1]);
}
//execute function? (not sure if done right)
shuffle();
//function to show the random picture when button is clicked
function showMeme() {
document.getElementById('Meme1').style.visibility='visible';
}
</script>
</body>
これは、最初にロードされたときのWebサイトを示す画像です。
2番目の図は、ボタンがクリックされたときに何が起こるかを示しています。最初の画像が消え、2番目のランダムな画像が表示されます(本来あるべき姿)が、別のランダムな画像を生成するボタンが消えるだけです
document.write
ページ全体が置き換えられます。あなたを与える<div>
初期画像にIDを付け、これを使用してこの要素のコンテンツを置き換えます。<div id="wrapper"> <img id="number" src="images/zahl1.jpg" alt="Number"> </div>
交換
document.write(images1[index1]);
と:document.getElementById('wrapper').innerHTML = images1[index1];
を削除できることに注意してください
style='visibility:hidden'
配列内の要素は単純な文字列であり、ここには画像が読み込まれず、現在表示されている画像が完全に置き換えられるため、画像からスタイルを設定し、可視性の切り替えを取り除きます。画像を置き換えるだけで、これをさらに改善できます
src
それ以上のことをする理由がない限り、HTMLのチャンク全体を置き換える代わりに属性。
関連記事
- onclick関数をカスタムReactコンポーネントに追加するにはどうすればよいですか?
- OnClick関数がカスタムボタンコンポーネントで機能しない
- onclick()関数は、ボタンの値をテキストボックスにフェッチして1回だけ機能します
- setStateで関数onClickがrenderによって実行されるのはなぜですか?
- forループなしで関数内でランダムな動作をする関数をn回繰り返すことからnumpy配列を作成する
- 反応:Datatablesの各行のボタンにonclick関数を追加する方法
- 非同期関数を使用してonClickからのユーザー入力を待つ方法は?
- html関数で繰り返しコードを短縮し、jqueryでタグを返す方法
- Webの要素が突然消える
- ブートストラップリスト-グループ:アイテムを複製することは可能ですか?
- チェックボックスとそれに対応するリストタグを削除します
- ホバーまたはクリックして、それぞれの画像を表示します
- 私はajaxとjqueryを初めて使用するので、コードの何が問題なのかわかりません
- javascriptまたはjqueryを使用したJSONへのHTML非フォームデータ
- JavaScript/HTML/CSS/JQueryを介したフィルター可能なギャラリーが機能しない
- 非同期を使用してMathJaxでテキストをプレビューする
- 動的に作成されたID(親要素に基づくIDを使用)でクリックイベントをトリガーする
- 選択オプションから値を送信
これは役立つかもしれません: