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

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

ただいまの
回答率

90.48%

  • JavaScript

    20863questions

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

  • HTML

    11803questions

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

javascriptで時計を表示

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 808

44shito

score 4

javascriptdeでcanvasに 時計を表示したいのですがイメージ説明
5分おきに少し長いメモリにしたのですがどうすればいいのでしょうか。
また、針の太さを変える方法を教えてください
時針、分針、秒針はできてます。下がHTMLとjavascriptで記述したものです

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<script src="js/analogClock.js"></script>
<script src="js/myscript.js"></script>

<link rel="stylesheet" href="css/mystyle.css">
<title>情報</title><!-- tatileではなく、title -->

<style type="text/css">
html {
margin: 0;
padding: 0;
height: 100%;
min-height: 100%;
}

body {
margin: 0;
padding: 0;
height: 100%;
min-height: 100%;
background-color: gray;
text-align: center;
line-height: 175%;
}

container { /* id名にはシャープ(#)が必要 */

margin: 0px auto;
padding: 0;
position: relative;
width: 980px;
text-align: left;
}

header {
margin: 0;
padding: 0;
position: relative;
width: 100%;
height: 60px;
text-align: center;
}

main {
margin: 0;
padding: 0 20px 20px 20px;
position: relative;
float: right;
width: 600px;         }

nav {
margin: 0;
padding: 10px 10px;
position: relative;
float: left;
width: 280px;
height: auto;
}

footer {
margin: 0;
padding: 10px 10px;
position: relative;
clear: both;
}
</style>
</head>
<body>
<div id="container">
<header>
人口置換水準
</header>
<main>
<iframe id="iframeVideo" title="Youtube video player" width="640" height="510"
src="https://www.youtube.com/embed/D0mQAzuE7mM"
frameborder="0" allowfullscreen>
</iframe><!--元の動画-->
人口が増減しない均衡した状態となる水準を人口置換水準または合計特殊出生率という。
若年期の死亡率が低下すると人口が減りにくくなるので、この水準値は減少する。
2015年の日本の人口置換水準は2.07である。一人の女性が産む子供の数の平均が2.07人であるということである。
</main>a
<nav>
<canvas id="tokei" width="250" height="250"></canvas>
<button class="videoButton" onclick="playTheVideo('D0mQAzuE7mM')">置換水準
</button>
<button class="videoButton" onclick="playTheVideo('X4wSs4lJoMc')">平均寿命
</button>
<button class="videoButton" onclick="playTheVideo('PEI7CP747Bw')">平均年齢
</button>

</nav>

<footer>
</footer>
</div><!--end id = container-->

</body>
</html>

ソースコード(analogClock.js)
/*
context=canvas.getContext(contextId);
context.beginPath();
*/
var clockInterval;
function drawClock() {
var r = 100;
var x0 = r + 25;
var y0 = r + 25;
var rs = r * 0.85;//針の長さ
var rm = r * 0.6;
var rh = r * 0.4;
var ctx = document.getElementById('tokei').getContext('2d'); 
//時刻取得
var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();
//文字盤
ctx.beginPath();
ctx.arc(x0,y0,r,0,Math.PI*2,true);
ctx.fillStyle = '#000';
ctx.fill(); 
//秒針:分針時針は自分で
//秒針の先端のxy座標
ctx.beginPath();
ctx.moveTo(x0,y0);
var s_theta = s*Math.PI/30.0;
var sx = x0 + rs*Math.sin(s_theta);
var sy = y0 - rs*Math.cos(s_theta);
ctx.lineTo(sx,sy);
ctx.strokeStyle ='#f00';
ctx.linewidth = 2;
ctx.stroke();
//分針の先端のxy座標
ctx.beginPath();
ctx.moveTo(x0,y0);
var m_theta = m*Math.PI/30.0;
var mx = x0 + rm*Math.sin(m_theta+(s_theta/60));//秒針の60分1の角度を足していき1分経過したらm_thetaが1増えて,s_thetaが0になるので分針に秒針の動きを合わせる
var my = y0 - rm*Math.cos(m_theta+s_theta/60);
ctx.lineTo(mx,my);
ctx.strokeStyle ='#f00';
ctx.linewidth = 6;
ctx.stroke();
//時針の先端のxy座標
ctx.beginPath();
ctx.moveTo(x0,y0);
var h_theta = h*Math.PI/30.0;
var hx = x0 + rh*Math.sin(h_theta);
var hy = y0 - rh*Math.cos(h_theta);
ctx.lineTo(hx,hy);
ctx.strokeStyle ='#f00';
ctx.linewidth = 10;
ctx.stroke();
};
function start(){
clearInterval(clockInterval);
clockInterval = setInterval(drawClock,1000);
};
window.onload = start;

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/07/02 00:44

    質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。

    キャンセル

回答 1

checkベストアンサー

+2

以下のようにしてみてはいかがでしょうか?どこを変更したかはコメントに書いてあります。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <script src="js/analogClock.js"></script>
    <script src="js/myscript.js"></script>

    <link rel="stylesheet" href="css/mystyle.css">
    <title>情報</title><!-- tatileではなく、title -->

    <style type="text/css">
        html {
            margin: 0;
            padding: 0;
            height: 100%;
            min-height: 100%;
        }

        body {
            margin: 0;
            padding: 0;
            height: 100%;
            min-height: 100%;
            background-color: gray;
            text-align: center;
            line-height: 175%;
        }

        #container { /* id名にはシャープ(#)が必要 */

            margin: 0px auto;
            padding: 0;
            position: relative;
            width: 980px;
            text-align: left;
        }

        header {
            margin: 0;
            padding: 0;
            position: relative;
            width: 100%;
            height: 60px;
            text-align: center;
        }

        main {
            margin: 0;
            padding: 0 20px 20px 20px;
            position: relative;
            float: right;
            width: 600px;
        }

        nav {
            margin: 0;
            padding: 10px 10px;
            position: relative;
            float: left;
            width: 280px;
            height: auto;
        }

        footer {
            margin: 0;
            padding: 10px 10px;
            position: relative;
            clear: both;
        }
    </style>
</head>
<body>
<div id="container">
    <header>
        人口置換水準
    </header>
    <main>
        <iframe id="iframeVideo" title="Youtube video player" width="640" height="510"
                src="https://www.youtube.com/embed/D0mQAzuE7mM"
                frameborder="0" allowfullscreen>
        </iframe><!--元の動画-->
        人口が増減しない均衡した状態となる水準を人口置換水準または合計特殊出生率という。
        若年期の死亡率が低下すると人口が減りにくくなるので、この水準値は減少する。
        2015年の日本の人口置換水準は2.07である。一人の女性が産む子供の数の平均が2.07人であるということである。
    </main>
    a
    <nav>
        <canvas id="tokei" width="250" height="250"></canvas>
        <button class="videoButton" onclick="playTheVideo('D0mQAzuE7mM')">置換水準
        </button>
        <button class="videoButton" onclick="playTheVideo('X4wSs4lJoMc')">平均寿命
        </button>
        <button class="videoButton" onclick="playTheVideo('PEI7CP747Bw')">平均年齢
        </button>

    </nav>

    <footer>
    </footer>
</div>
<script>
    var clockInterval;
    function drawClock() {
        var r = 100;
        var x0 = r + 25;
        var y0 = r + 25;
        var rs = r * 0.9;//秒針の長さ
        var rm = r * 0.6;//短針の長さ
        var rh = r * 0.4;//短針の長さ
        var ctx = document.getElementById('tokei').getContext('2d');
        var now = new Date();
        var h = now.getHours();
        var m = now.getMinutes();
        var s = now.getSeconds();
        ctx.beginPath();
        ctx.arc(x0, y0, r, 0, Math.PI * 2, true);
        ctx.fillStyle = '#000';
        ctx.fill();
        ctx.beginPath();
        ctx.moveTo(x0, y0);
        var s_theta = s * Math.PI / 30.0;
        var sx = x0 + rs * Math.sin(s_theta);
        var sy = y0 - rs * Math.cos(s_theta);
        ctx.lineTo(sx, sy);
        ctx.strokeStyle = '#f00';
        ctx.lineWidth = 3;//linewidthではなくlineWidth
        ctx.stroke();
        ctx.beginPath();
        ctx.moveTo(x0, y0);
        var m_theta = m * Math.PI / 30.0;
        var mx = x0 + rm * Math.sin(m_theta + (s_theta / 60));
        var my = y0 - rm * Math.cos(m_theta + s_theta / 60);
        ctx.lineTo(mx, my);
        ctx.strokeStyle = '#f00';
        ctx.lineWidth = 6;//linewidthではなくlineWidth
        ctx.stroke();
        ctx.beginPath();
        ctx.moveTo(x0, y0);
        var h_theta = h * Math.PI / 30.0;
        var hx = x0 + rh * Math.sin(h_theta);
        var hy = y0 - rh * Math.cos(h_theta);
        ctx.lineTo(hx, hy);
        ctx.strokeStyle = '#f00';
        ctx.lineWidth = 9;//linewidthではなくlineWidth
        ctx.stroke();
    }
    function start() {
        clearInterval(clockInterval);
        clockInterval = setInterval(drawClock, 1000);
    }
    window.onload = start;
</script>
</body>
</html>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • JavaScript

    20863questions

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

  • HTML

    11803questions

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