![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
【HTML5】【canvas】【js】を利用した背景効果
初めまして。
早速ですが、
http://www.jeia.co.jp/
の様な背景に動き(ランダム)がある、
非FLASHのWEBサイトを制作したいと思っているのですが、
どの様にすれば良いのか全く分かりません。
検索で分かった事は【HTML5】×【canvas】×【js】で動作してるとの
記事がありましたが、【HTML5】×【canvas】×【js】に関してはほぼ無知
な私には少し難しいみたいなのでご質問させて頂きました。
勉強不足で大変申し訳ないのですが、
詳しい方ご教授頂けませんでしょうか?
また、同じ様な動きをする【jQuery】のライブラリがあれば
教えて頂けると助かります。
No.2ベストアンサー
- 回答日時:
No1様が紹介なさっている後半のものの例です。
HTML5でもcanvasでもないし、あの人のように簡潔にも書けてないですけれど。
<div id="backlayer">の範囲の中で、ご提示のサイトのような模様が移動します。
画像データを投稿するのが面倒なので、四角の模様は<div>で代用しています。
画像などを使用する場合は、対象が変わるだけで同じ要領で可能かと。
parameterを変えることで、表示する個数やサイズの範囲などが変えられます。
簡単にしたつもりなんだけれど、けっこう長くなったので文字数制限に引っかかるかも。
ランダムな直線移動のみで、反射(跳ね返り)とかは行なっていません。
(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
div#backlayer {
position:absolute;
overflow:hidden;width:800px;
height:600px;
z-index:-5;
border:1px solid green;
}
div#backlayer div {
position:absolute;
overflow:hidden;
border:10px solid #888;
opacity:0.3;
filter:alpha(opacity=30);
}
</style>
</head>
<body>
<div id="backlayer">
</div>
<script type="text/javascript">
<!--
var Mover = function() {
this.element = document.createElement("div");
document.getElementById("backlayer").appendChild(this.element);
}
Mover.parameter = {
number : 20, // 表示する個数
size : { max:50, min:10 }, // 生成される柄(div)のサイズ範囲
speed : { max:4, min:2 } // 移動速度の範囲
};
Mover.recall = function(obj) {
return function() {obj.move()};
}
Mover.prototype = {
move : function() {
var style = this.element.style;
this.x += this.dx, this.y += this.dy;
style.top = (this.y | 0) + "px";
style.left = (this.x | 0) + "px";
if (this.x>this.maxWidth || this.x<this.min || this.y>this.maxHeight || this.y<this.min) this.reset();
setTimeout( Mover.recall(this), 50);
},
つづく(やっぱり長すぎた)
No.4
- 回答日時:
つづきです。
(前半がダブってしまったようで失礼しました)
reset : function() {
var p = Mover.parameter, range = document.getElementById("backlayer");
var size = Math.random() * (p.size.max - p.size.min) + p.size.min | 0;
var speed = Math.random() * (p.speed.max - p.speed.min) + p.speed.min;
var style = this.element.style;
var x, y, dx, dy, a = Math.random() * Math.PI * 2;
this.min = -p.size.max * 1.5;
this.maxWidth = range.clientWidth - this.min;
this.maxHeight = range.clientHeight - this.min;
x = Math.random() * this.maxWidth;
y = Math.random() * this.maxHeight;
dx = speed * Math.cos(a), dy = speed * Math.cos(a);
switch (Math.random() * 4 | 0) {
case 0:
dx = Math.abs(dx), x = this.min;
break;
case 1:
dy = Math.abs(dy), y = this.min;
break;
case 2:
dx = -Math.abs(dx), x = range.clientWidth;
break;
case 3:
dy = -Math.abs(dy), y = range.clientHeight;
}
this.x = x, this.y = y;
this.dx = dx, this.dy = dy;
style.width = size + "px";
style.height = size + "px";
style.borderWidth = (size * 0.4 | 0) + "px";
}
}
if (document.getElementById("backlayer")) {
var i, mover;
for (i=0; i<Mover.parameter.number; i++) {
mover = new Mover();
mover.reset();
mover.move();
}
}
//-->
</script>
</body>
</html>
No.3
- 回答日時:
No1様が終わりのほうで紹介なさっているものの例です。
HTML5でもcanvasでもないし、あの人のように簡潔にも書けてないですけれど。
<div id="backlayer">の範囲の中で、ご提示のサイトのような模様が移動します。
画像データを投稿するのが面倒なので、四角の模様は<div>で代用しています。
画像などを使用する場合は、対象が変わるだけなので同じ要領で可能かと。
parameterを変えることで、表示する個数やサイズの範囲などが変えられます。
動きはランダムな直線移動のみで、反射(跳ね返り)とかは行なっていません。
簡単にしたつもりなんだけれど、けっこう長くなったので文字数制限に引っかかるかも。
(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
div#backlayer {
position:absolute;
overflow:hidden;width:800px;
height:600px;
z-index:-5;
border:1px solid green;
}
div#backlayer div {
position:absolute;
overflow:hidden;
border:10px solid #888;
opacity:0.3;
filter:alpha(opacity=30);
}
</style>
</head>
<body>
<div id="backlayer">
</div>
<script type="text/javascript">
<!--
var Mover = function() {
this.element = document.createElement("div");
document.getElementById("backlayer").appendChild(this.element);
}
Mover.parameter = {
number : 20, // 表示する個数
size : { max:50, min:10 }, // 生成される柄(div)のサイズ範囲
speed : { max:4, min:2 } // 移動速度の範囲
};
Mover.recall = function(obj) {
return function() {obj.move()};
}
Mover.prototype = {
move : function() {
var style = this.element.style;
this.x += this.dx, this.y += this.dy;
style.top = (this.y | 0) + "px";
style.left = (this.x | 0) + "px";
if (this.x>this.maxWidth || this.x<this.min || this.y>this.maxHeight || this.y<this.min) this.reset();
setTimeout( Mover.recall(this), 50);
},
つづく(やっぱり長すぎた)
ありがとうございます!
上記のソースを参考に制作出来ました!
あのようなWEBページを初めて見て、
【HTML5】【canvas】なのかなと思っていたのですが、
【Js】だったのですね。
JavaScriptにして勉強不足ですが、
これから頑張って勉強して行きたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
ご提示のページは、HTML5の宣言はされてませんが、確かにCANVAS要素を使って
短形を描画してますね。最初にjavascriptでブラウザーを判定してIEの時は、
CANVAS要素を作らないようにしているようです。まだIEはCANVASに対応していません。
>私には少し難しいみたい少し難しいみたい...
CANVAS要素の使い方自体はそんなに難しくないです。CANVAS要素を使って、javascript
で領域内に、短形図形やイメージ画像を配置したり、その位置座標や、角度、色、透明度
等をかえられます。↓に説明されたページやサンプルがあります。
http://www.html5.jp/canvas/index.html
http://journal.mycom.co.jp/special/2009/html5-1/ …
http://ayuta.co.jp/html5-samples/
難しそうなのは、範囲内で規則的にランダムに動かす時の座標計算ロジックや、タイマー
処理の制御ロジックです。数学(三角関数)の知識(数学IIB程度)が必要です。
ご提示サイトのコードは、「bgCanvas.js」
http://www.jeia.co.jp/common/js/bgCanvas.js
です。中身を研究してみるとよいかも。ご提示サイトに無断でそのまんま使っちゃだめよ!
>同じ様な動きをする【jQuery】のライブラリ
jQuery使ったやつで、同じ様なのがあるかどうかは調べませんがあるような気がします。
jQueryやcanvas要素使わなくても、javascriptのみで同じ様な事は出来ます。
短形図形のイメージファイルを準備して<img>要素を作り、そのスタイル属性やCSS定義で
position:absoluteした上で、top、leftのpx値を、同様のロジックで変更してやれば
よいのです。
この場合もやはり、領域範囲の判定や座標計算ロジックが肝になります。また、パソコン
がとろいと、ぎくしゃくしてしまいます。
※ 待ってれば、<みちのく>に住むあの人がちゃちゃっと作ってくれるかも.....
ありがとうございます!
参考サイトは意見させて頂きました。
CANVAS要素を使用し色々な事が出来るみたいですね!
今後の為にも勉強になります。
ただ、【yyr446】さんのおっしゃられる様に
>難しそうなのは、範囲内で規則的にランダムに動かす時の座標計算ロジックや、タイマー
処理の制御ロジックです。
が私には難しいです。。。。
ですが、参考サイトを見ながらて自分でも制作出来る様に
頑張ってみたいと思います。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- Instagram HTML5の廃止とJavaScript 2 2022/04/13 21:05
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript ローディングアニメーションのロゴがページを読み込んだ後でも消えません 1 2022/09/20 21:50
- 一眼レフカメラ SONY5100を使っています。 カメラ初心者です。 人物(モデルさん)などを撮る時 綺麗に撮れる設 3 2023/05/19 22:54
- JavaScript 階層別の組織図の自動作成について 1 2022/10/26 13:42
- HTML・CSS HTML <input type=password>の黒丸の色を変える方法 3 2022/11/23 13:56
- Photoshop(フォトショップ) 【至急】 ウェブサイトやアプリとかでよく見かける、添付画像のように背景にあるものをぼかしつつ透過する 2 2023/07/17 10:57
- その他(IT・Webサービス) サイト。お問い合わせコードを抜き取り、このコードに、返信文字を入力 して、相手に送信は可能ですか。 1 2023/05/18 13:18
- その他(ブラウザ) zoomのバーチャル背景が選べない 4 2022/12/08 12:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のリンク画像を一定時間で...
-
innerHTMLに代入したインライン...
-
読み込んだQRコードをフォーム...
-
表示・非表示のスクリプトで、...
-
javascriptテキストBOX色を元に...
-
dblclickでdiv要素を一回だけ作...
-
計算結果の表示方法について
-
console.log結果をhtmlで表示し...
-
HTMLとJavascriptについて
-
HTMLとJavaScriptで作ったタイ...
-
Slick.jsのオプションrtlについて
-
jqueryのプラグインslickの画像...
-
クリックして変更した画像を他...
-
JS <a></a>タグ内のリンク先ア...
-
jqueryのsortableで一部ソート...
-
文字をクリックしたら別の文字...
-
フッター上部に謎の隙間
-
プログラミングでのビンゴマシ...
-
フォームに入力された値により...
-
window.openで値の渡し方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
createElementで作成した要素を...
-
removeEventListenerについて
-
クリックで色変更後に既に変更...
-
iframe内のリンクが飛ばないの...
-
[急ぎ] videoタグで埋め込んだm...
-
背景色を透明化
-
console.log結果をhtmlで表示し...
-
表示・非表示のスクリプトで、...
-
getElementByIdの戻り値がnull...
-
removeAttribute()メソッドで削...
-
テキストエリア内の一部の文字...
-
タブで開いてさらにタブ内をア...
-
IFRAMEの表示/非表示を切り替え...
-
変数内容をHTML内で表示する方法
-
HTMLタグに複数のクラスを設定...
-
jQueryのアコーディオンメニュ...
-
取得した要素がインライン要素...
おすすめ情報