質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

8955閲覧

上下にふわふわ+ランダム配置(math.random)

PotatoHead

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/02/15 12:36

編集2016/02/16 02:16

###前提・実現したいこと
javascriptとCSSで

1、「幅960px」「高さ500px」のdivの中で文言を散らばして配置し、
2、その文言達が常に上下にふわふわと動いているコンテンツ

を作りたいです。
説明が難しいのですが…。
中身の文言が違う吹き出しみたいなのがいっぱいある感じです。
html4.01でIE9まで対応させたいです。

###発生している問題・エラーメッセージ
正直何から始めていいか分からず…。
jQueryのプラグインもいいのが見つからず途方に暮れています。
プラグインの掛け合わせでもいいので何かご教授いただけたら嬉しいです、、、
載せるコードもなくすみません。。。

###追記(2/16)
お二人様ご回答ありがとうございます。
なんとか文言たちを上下に動かすことができました。
あとはランダムに配置する部分なのですが、回答にあったmath.randomを使いたいのですが使い方がいまいち分からず。。。できれば要素が被らずに配置したいのですが、、、ご教授いただけると幸いです。
現在こんな感じです。

html

1<ul class="wordList"> 2 <li>文言</li> 3 <li>文言</li> 4 <li>文言</li> 5 <li>文言</li> 6<!-- /.wordList--></ul>

css

1.wordList { 2 width: 960px; 3 margin: 0 auto; 4 background: #000000; 5 position: relative; 6} 7 8.wordList li { 9 margin: 0 auto; 10 background: #000000; 11 padding: 20px; 12 text-align: center; 13 color: #ffffff; 14 position: absolute; 15}

javascript

1$(function () { 2 setTimeout('rect()'); 3}); 4 5function rect() { 6 $('.wordList li:nth-child(2n)').animate({ 7 marginTop: '-=10px' 8 }, 800).animate({ 9 marginTop: '+=10px' 10 }, 800); 11 $('.wordList li:nth-child(3n)').animate({ 12 marginTop: '-=6px' 13 }, 800).animate({ 14 marginTop: '+=6px' 15 }, 800); 16 setTimeout('rect()', 1600); 17}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

  • ちらす部分の基本的なCSS設定(position:absoluteとか)
  • ふわふわさせる部分のアニメーション設定(上下動でよければCSS AnimationやCSS Transition)で出来そうです)

1パターンだけだと統制が取れすぎるので、数パターン分設定を作ります。

  • ランダム配置のJS設定(それぞれの吹き出しに対してCSSのleft, top値をランダムで設定する)

基本的にはこれらを1つ1つ片付けてゆけば出来ると思います。
プラグインはjQueryだけで充分かもしれません。

まずやるべきは、HTMLのコーディングと吹き出し部分のCSS設定ですね。

JSにおけるランダム値の作り方はこちらを参考にどうぞ。
min から max までの乱整数を返す関数を流用すれば、任意の幅のランダム値が作れるはずです。
Math.random()

ランダム配置のサンプルコードです。
幅960、高さ500の領域の中に収めるための座標の最小値と最大値についてですが、

top: 0〜500
left: 0〜960

となります。
なので、Math.randomのサンプルにある関数に対して、この範囲内の数値をランダムな数として出してくれるように引数を設定して実行すればいいです。

ここまでの処理では「被らないようにしたい」という点は満たしていません。
それについては、配置した後で「被っているかどうか」を判定し、「被っている場合はどうするか」という処理を追記する必要があります。

html

1<div class="container"> 2 <ul class="wordList"> 3 <li>セリフサンプル1</li> 4 <li>セリフサンプル2</li> 5 </ul> 6</div>

css

1.container { 2 margin: 0 auto; 3 width: 960px; 4 height: 500px; 5 background: #CCC; 6 position: relative; 7} 8 9.wordList > li { 10 background: #000000; 11 padding: 20px; 12 text-align: center; 13 color: #ffffff; 14 position: absolute; 15}

javascript

1// 引数で渡した範囲内のランダムな整数を生成するための関数 2var getRandomInt = function(min, max) { 3 return Math.floor(Math.random() * (max - min + 1)) + min; 4}; 5 6// 要素の取得 7var $container = $('.container'), 8 $wordList = $('.wordList').find('li'), 9 containerWidth = $container.width(), 10 containerHeight = $container.height(); 11 12console.log(containerWidth, containerHeight) // 960, 500 13 14// liそれぞれをランダムに配置 15$.map($wordList, function(item, index) { 16 var $item = $(item), // wordListのli要素が1番目から順に入ってきます 17 topPos = getRandomInt(0, containerHeight), // 0〜500の間でtopの座標を取得 18 leftPos = getRandomInt(0, containerWidth); // 0〜960の間でleft の座標を取得 19 20 // 取得したランダム座標を設定 21 $item.css({ 22 top: topPos, 23 left: leftPos 24 }); 25});

投稿2016/02/15 13:12

編集2016/02/17 03:23
yamato_hikawa

総合スコア2092

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PotatoHead

2016/02/16 13:58

ご回答ありがとうございます。 1つ1つ順序立てていったらなんとか前に進むことができました!ありがとうございます。あとはmath.randomを使うところなんですが…。もし可能であればmath.randomについてもう少しヒントいただけませんでしょうか…。よろしくお願いします。
yamato_hikawa

2016/02/17 03:25

回答にサンプルを追記しました。 被っているかどうかの判定については、配置した後でそれぞれの要素のポジションを取得してみて、 それを元に上下左右の何処かが他の要素のポジションと被っていないかを判断する形になります。
guest

0

jqFloatというプラグインはいかがでしょうか。
http://www.inwebson.com/demo/jqfloat/
上記サイトは英語ですが、「jqFloat」で検索していただければ日本語で解説しているページがいくつか見つかると思います。

投稿2016/02/16 02:04

編集2016/02/16 02:05
narakener

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PotatoHead

2016/02/16 14:01

ご回答ありがとうございます。こんな便利なプラグインがあったのですね(T ^ T)今回は別のやり方でやらせてもらいますが、今後是非使ってみたいと思います!ありがとうございました。
guest

0

こんにちは。

常に上下にふわふわと動いているコンテンツ

IEに対応ということなのでjQueryではいかがでしょうか。
理想のものと合っているかは分かりませんが、

SAMPLE

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 2<script> 3$(function () { 4 setTimeout('rect()'); 5}); 6function rect() { 7 $('#content p').animate({ 8 marginTop: '-=10px' 9 }, 900).animate({ 10 marginTop: '+=10px' 11 }, 900); 12} 13</script> 14<style> 15#content{ 16 width:960px; 17 height:500px; 18 position:relative; 19} 20#content p{ 21 background:#ffc4c4; 22 width:100px; 23 padding:20px; 24 text-align:center; 25 color:#fff; 26 position:absolute; 27} 28</style> 29 30<div id="content"> 31 <p style="top:20px; left:30px;">box1</p> 32 <p style="top:50px; left:330px;">box2</p> 33 <p style="top:20px; left:700px;">box3</p> 34 <p style="top:350px; left:100px;">box4</p> 35 <p style="top:250px; left:400px;">box5</p> 36 <p style="top:300px; left:700px;">box6</p> 37</div>

▲この場合全ての要素(p)が同じ動き・スピードですが、
動きをランダムにしたい場合は、変化をつけたい要素(p)にクラス名をつけて

script

1 $('#content p').animate({ 2 marginTop: '-=10px' 3 }, 900).animate({ 4 marginTop: '+=10px' 5 }, 900);

この部分にクラス名で追加すれば、個別に変化をつけることが出来ます。

御参考ください。

投稿2016/02/16 01:49

chachaomaru

総合スコア107

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PotatoHead

2016/02/16 13:59

ご回答ありがとうございます!ちょうど同じような形で作っていたので大変参考になりました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問