<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Canvasの学習</title>
<link href="css/style.css" rel="stylesheet" type="text/css">
<link href="css/mycanvas.css" rel="stylesheet" type="text/css">
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
</head>
<body id="main">
<canvas id="mycanvas">
Canvasに対応したブラウザを使ってください。
</canvas>
<script src="js/myscript02.js"></script>
</body>
</html>
@charset "utf-8";
html,body{
height:100%;
}
canvas{
display:block;
width:100%;
height:100%;
background:rgba(204,204,204,0.2);
}
/*
1.ブラウザ全体にカンバスを描写
2.マウスオーバーすると中心点からマウスまで1本の線
マウスオーバーするとマウスからブラウザ端までの線のアニメーション。
3.ブラウザサイズ変更の度にカンバスのサイズを変更
*/
var width;//ブラウザ幅
var height;//ブラウザ高
var element;
var canvas;
var ctx;
var mouseX;
var mouseY;
//線の本数
var lines = 20;
//ブラウザの中心から頂点までを半径とした円周上の点の座標
var endPX = new Array;
var endPY = new Array;
var radius;
var angle = new Array;
var angleSpeed = 0.2;
var angleSize = new Array;
var frame = 0;
function windowSize(){
width = $('.canvas-wrapper').width();
height = $('.canvas-wrapper').height();
}
window.onload = function(){
//canvasを全画面で描写
windowSize();
$( '#mycanvas' ).get( 0 ).width = width;
$( '#mycanvas' ).get( 0 ).height = height;
mouseX = width/2;
mouseY = height/2;
for(var i = 0;i < lines;i++){
endPX[i] = 0;
endPY[i] = 0;
angle[i] = i / 6;
if(i == 0 || i == lines - 1){
angleSize[i] = angleSpeed;
}else{
angleSize[i] = angleSpeed + 0.1;
}
}
//ブラウザの対角線の長さを半径とする
radius = Math.ceil(Math.sqrt(Math.pow(width,2) + Math.pow(height,2)));
// 各エレメントを取得
element = document.getElementById("mycanvas");
mouseEvent();
canvas = document.getElementById('mycanvas');
if(!canvas || !canvas.getContext) return false;
ctx = canvas.getContext('2d');
}
window.onresize=function(){
//canvasを全画面で描写
windowSize();
//ブラウザの対角線の長さを半径とする
radius = Math.ceil(Math.sqrt(Math.pow(width,2) + Math.pow(height,2)));
$( '#mycanvas' ).get( 0 ).width = $( window ).width();
$( '#mycanvas' ).get( 0 ).height = $( window ).height();
}
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
function loop(){
requestAnimFrame(loop);
frame++;
if(frame > 60) frame = 0;
//カンバスのリセット
ctx.clearRect(0,0,width,height);
drawLineCenter();
drawLineWindow();
}
function drawLineCenter(){
ctx.clearRect(0,0,width,height);
//直線の描写の開始宣言
ctx.beginPath();
//直線の最初の点
ctx.moveTo(width/2,height/2);
ctx.strokeStyle = 'rgb(0,0,0)';
//線を引く
ctx.lineTo(mouseX,mouseY);
ctx.lineWidth = 0.1;
ctx.stroke();
}
function drawLineWindow(){
//直線の描写の開始宣言
for(var i = 0;i < lines;i++){
ctx.beginPath();
ctx.lineWidth = 0.1;
//直線の最初の点
ctx.moveTo(mouseX,mouseY);
if(i == 0 || i == lines - 1){
ctx.strokeStyle = 'rgba(192, 80, 77, 0)';
}else{
ctx.strokeStyle = 'rgb(0,0,0)';
}
//線を引く
ctx.lineTo(endPX[i],endPY[i]);
ctx.stroke();
endPX[i] = Math.cos(Math.PI / 180 * angle[i]) * radius + mouseX;
endPY[i] = Math.sin(Math.PI / 180 * angle[i]) * radius + mouseY;
if(true) {
//先頭と一番後ろは判定用
if(i == 0 || i == lines - 1){
angle[i] += angleSize[i];
}else{
//一番後ろ以下の角度になったとき加速
if(angle[0] > angle[i]){
angleSize[i] = angleSpeed + 0.1;
//先頭以上の角度になったとき減速
}else if(angle[i] > angle[lines - 1]){
angleSize[i] = angleSpeed - 0.1;
}
angle[i] += angleSize[i];
}
} else {
// 角度を0に戻す
//angle[i] = 0;
}
}
console.log(angleSize[10]);
}
function mouseEvent(){
function MouseOverFunc(e){
loop();
}
function MouseMoveFunc(e){
mouseX = e.pageX;
mouseY = e.pageY;
}
function MouseOutFunc(e){
}
// ------------------------------------------------------------
// イベントのリッスンを開始する
// ------------------------------------------------------------
// イベントリスナーに対応している
if(element.addEventListener){
// マウスオーバー時に実行されるイベント
element.addEventListener("mouseover" , MouseOverFunc);
// マウスカーソルが移動するたびに実行されるイベント
element.addEventListener("mousemove" , MouseMoveFunc);
// マウスアウト時に実行されるイベント
element.addEventListener("mouseout" , MouseOutFunc);
// アタッチイベントに対応している
}else if(element.attachEvent){
// マウスオーバー時に実行されるイベント
element.attachEvent("onmouseover" , MouseOverFunc);
// マウスカーソルが移動するたびに実行されるイベント
element.attachEvent("onmousemove" , MouseMoveFunc);
// マウスアウト時に実行されるイベント
element.attachEvent("onmouseout" , MouseOutFunc);
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.