نمایش نتایج 1 تا 40 از 144

نام تاپیک: خارج از دستور - پرسشهایی از جنس دیگر

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #7
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    73
    پست
    3,585

    نقل قول: خارج از دستور - پرسشهایی از جنس دیگر

    در مورد ساعت:
    اگر هدف نمایش وقت هست که خود taskbar ساعت داره و نیازی نیست و کار بیهوده ای هست،
    اگر هدف زیبایی فرم و ... هست که باز هم کار عبثی است!
    اما اگر هدف چالش کدنویسی و محک زدن توانایی و ... است نتیجه اش همین هست که کار بیهوده ایست و بهتره وقتمون رو روی موارد مهمتر بگذاریم.

    به هر حال چند راه وجود داره:
    1- ساعت flash - که بهتره از اون اجتناب بشه، ولی ده ها طرح دیجیتال و آنالوگ ازش به راحتی در دسترس هست.
    2- استفاده از فونت مناسب (بهترین روش)
    3- استفاده از html5 در کنترل web browser
    اون ساعت که نمونه اش رو فرستاده بودم در اصل یک فایل html بود که همینجا پیوست میکنم



    <!DOCTYPE HTML>
    <html>
    <head>
    <title>clock</title>
    <style>
    body {
    background-color:#3084e2;
    }
    #cnv {
    position:absolute;
    top:50%;
    left:50%;
    width:500px;
    height:500px;
    margin:-250px 0 0 -250px;
    }
    </style>
    </head>


    <body onload="clock();">


    <canvas id="cnv"></canvas>


    <script>
    function clock() {
    var canvas = document.getElementById('cnv');

    //guarantee canvas is supported
    if (!canvas.getContext) {
    alert('canvas not supported!');
    return;
    }

    canvas.width = 500;
    canvas.height = 500;
    tick();
    }


    function tick() {
    var d = new Date();
    var h = d.getHours();
    var m = d.getMinutes() + h * 60;
    var s = d.getSeconds() + m * 60;
    var ms = d.getMilliseconds();

    //multiply by 6 to get basic sec angle, then add up to
    //5.994 degrees (999 * 0.006) to account for milliseconds
    var secAngle = -90 + s * 6 + ms * 0.006;

    //multiply by 6 to get basic min angle, then add up to
    //5.9 degrees (59 * 0.1) to account for seconds
    var minAngle = -90 + s * 0.1;

    //multiply by 30 to get basic hour angle, then add up to
    //29.5 degrees (59 * 0.5) to account for minutes, and up to
    //0.4916666667 degrees (59 * 1/120) to account for seconds
    var hourAngle = -90 + (s / 120);

    var canvas = document.getElementById('cnv');
    var ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, 500, 500);

    drawFace(ctx);

    ctx.translate(250, 250);
    drawTicks(ctx);
    drawHourHand(ctx, hourAngle);
    drawMinHand(ctx, minAngle);
    drawSecHand(ctx, secAngle);
    ctx.translate(-250, -250);
    drawFace2(ctx);

    setTimeout(tick, 31);
    }


    function drawFace(ctx) {
    //outer black ring
    ctx.beginPath();
    ctx.arc(250, 250, 250, 0, 2 * Math.PI);
    ctx.fillStyle = '#111';
    ctx.fill();
    ctx.closePath();

    //next light grey ring
    ctx.beginPath();
    ctx.arc(250, 250, 248, 0, 2 * Math.PI);
    ctx.fillStyle = '#bbb';
    ctx.fill();
    ctx.closePath();


    //outer gradient bezel
    var g1x1 = 250 + 246 * Math.cos(4/3*Math.PI);
    var g1y1 = 250 + 246 * Math.sin(4/3*Math.PI)
    var g1x2 = 250 + 246 * Math.cos(1/3*Math.PI);
    var g1y2 = 250 + 246 * Math.sin(1/3*Math.PI);
    var g1 = ctx.createLinearGradient(g1x1,g1y1,g1x2,g1y2);
    g1.addColorStop(0, '#f4f4f4');
    g1.addColorStop(1, '#000');

    ctx.beginPath();
    ctx.arc(250, 250, 246, 0, 2 * Math.PI);
    ctx.fillStyle = g1;
    ctx.fill();
    ctx.closePath();


    //next outer bezel
    var g2x1 = 250 + 224 * Math.cos(4/3*Math.PI);
    var g2y1 = 250 + 224 * Math.sin(4/3*Math.PI)
    var g2x2 = 250 + 224 * Math.cos(1/3*Math.PI);
    var g2y2 = 250 + 224 * Math.sin(1/3*Math.PI);
    var g2 = ctx.createLinearGradient(g2x1,g2y1,g2x2,g2y2);
    g2.addColorStop(0, '#000');
    g2.addColorStop(1, '#777');

    ctx.beginPath();
    ctx.arc(250, 250, 224, 0, 2 * Math.PI);
    ctx.fillStyle = g2;
    ctx.fill();
    ctx.closePath();


    //tan clock face
    ctx.beginPath();
    ctx.arc(250, 250, 212, 0, 2 * Math.PI);
    ctx.fillStyle = '#d5c595';
    ctx.fill();
    ctx.closePath();
    }


    function drawTicks(ctx) {
    //radial lines
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 0);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 30);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 60);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 90);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 120);
    drawPath(ctx, 'M -108,-1 L 108,-1 108,1 -108,1 Z', '#baa77c', 150);


    //triangle ticks
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', 0);
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', 90);
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', 180);
    drawPath(ctx, 'M 154,0 L 178,-6 178,6 Z', '#111', -90);

    //long brown ticks
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 30);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 60);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 120);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', 150);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -30);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -60);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -120);
    drawPath(ctx, 'M 156,-2 L 180,-2 180,2 156,2 Z', '#baa77c', -150);

    //text labels: 3,6,9,12
    ctx.font = '24pt Georgia';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.fillStyle = '#444';
    ctx.fillText('3', 140, -4);
    ctx.fillText('6', 0, 138);
    ctx.fillText('9', -140, -4);
    ctx.fillText('12', 0, -140);

    //big dot above 12
    ctx.beginPath();
    ctx.arc(0, -195, 4, 0, 2 * Math.PI);
    ctx.fillStyle = '#444';
    ctx.fill();
    ctx.closePath();

    for (var i = 0; i < 360; i += 30) {
    //outer tick squares
    drawPath(ctx, 'M 180,-3 L 184,-3 184,3 180,3 Z', 'rgba(68,68,68,0.8)', i);

    //inner tick squares
    drawPath(ctx, 'M 110,-3 L 120,-3 120,3 110,3 Z', 'rgba(68,68,68,0.8)', i);


    //outer text labels
    var lbl = '' + Math.round(i/6 + 15);
    if (lbl == '60') lbl = '';
    if (lbl == '65') lbl = '5';
    if (lbl == '70') lbl = '10';
    var x = 195 * Math.cos(i * Math.PI / 180.0);
    var y = 195 * Math.sin(i * Math.PI / 180.0);
    ctx.save();
    ctx.translate(x,y);
    ctx.rotate((i + 90 - (i > 0 && i < 180 ? 180 : 0)) * Math.PI / 180.0);
    ctx.font = '9pt Georgia';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle';
    ctx.fillStyle = 'rgba(68,68,68,0.8)';
    ctx.fillText(lbl, 0, 0);
    ctx.restore();

    //far outer dots between labels
    ctx.beginPath();
    x = 195 * Math.cos((i+15) * Math.PI / 180);
    y = 195 * Math.sin((i+15) * Math.PI / 180);
    ctx.arc(x, y, 1.5, 0, 2 * Math.PI);
    ctx.fillStyle = '#444';
    ctx.fill();
    ctx.closePath();

    for (var j = 0; j < 25; j += 6) {
    if (j != 0) {
    //outer tick ring - long ticks
    drawPath(ctx, 'M 174,-0.5 L 184,-0.5 184,0.5 174,0.5 Z', '#444', i+j);

    //inner tick ring - short ticks
    drawPath(ctx, 'M 114,-0.5 L 120,-0.5 120,0.5 114,0.5 Z', 'rgba(68,68,68,0.8)', i+j);
    }

    for (var k = 1.5; k < 5; k += 1.5) {
    //outer tick ring - short ticks
    drawPath(ctx, 'M 180,-0.3 L 184,-0.3 184,0.3 180,0.3 Z', 'rgba(68,68,68,0.5)', i+j+k);
    }
    }
    }
    }


    function drawSecHand(ctx,ang) {
    drawPath(ctx, 'M -50,0 L -45,-5 -25,-5 -22,-2 22,-2 25,-5 180,0 25,5 22,2 -22,2 -25,5 -45,5 Z', '#c21', ang);


    ctx.beginPath();
    ctx.arc(0, 0, 8, 0, 2 * Math.PI);
    ctx.fillStyle = '#c21';
    ctx.fill();
    ctx.closePath();
    }


    function drawMinHand(ctx,ang) {
    drawPath(ctx, 'M 0,0 L 1,-2 20,-2 22,-5 122,-5 124,-2 146,-2 168,0 146,2 124,2 122,5 22,5 20,2 1,2 0,0 24,0 24,2 120,2 122,0 120,-2 24,-2 24,0 Z', '#111', ang);
    }


    function drawHourHand(ctx,ang) {
    drawPath(ctx, 'M 0,0 L 1,-3 14,-3 17,-7 97,-7 100,-3 112,-2 134,0 112,2 100,3 97,7 17,7 14,3 1,3 0,0 18,0 21,3 94,3 96,0 94,-3 21,-3 18,0 Z', '#000', ang);
    }


    function drawFace2(ctx) {
    //outer center button ring
    var g1x1 = 250 + 5 * Math.cos(4/3*Math.PI);
    var g1y1 = 250 + 5 * Math.sin(4/3*Math.PI)
    var g1x2 = 250 + 5 * Math.cos(1/3*Math.PI);
    var g1y2 = 250 + 5 * Math.sin(1/3*Math.PI);
    var g1 = ctx.createLinearGradient(g1x1,g1y1,g1x2,g1y2);
    g1.addColorStop(0, '#999');
    g1.addColorStop(1, '#333');

    ctx.beginPath();
    ctx.arc(250, 250, 5, 0, 2 * Math.PI);
    ctx.fillStyle = g1;
    ctx.fill();
    ctx.closePath();

    //inner center button
    var g2x1 = 250 + 3 * Math.cos(4/3*Math.PI);
    var g2y1 = 250 + 3 * Math.sin(4/3*Math.PI)
    var g2x2 = 250 + 3 * Math.cos(1/3*Math.PI);
    var g2y2 = 250 + 3 * Math.sin(1/3*Math.PI);
    var g2 = ctx.createLinearGradient(g2x1,g2y1,g2x2,g2y2);
    g2.addColorStop(0, '#ccc');
    g2.addColorStop(1, '#aaa');

    ctx.beginPath();
    ctx.arc(250, 250, 3, 0, 2 * Math.PI);
    ctx.fillStyle = g2;
    ctx.fill();
    ctx.closePath();

    //highlight (gradient overlay)
    var g3x1 = 250 + 212 * Math.cos(4/3*Math.PI);
    var g3y1 = 250 + 212 * Math.sin(4/3*Math.PI)
    var g3x2 = 250 + 212 * Math.cos(1/3*Math.PI);
    var g3y2 = 250 + 212 * Math.sin(1/3*Math.PI);
    var g3 = ctx.createLinearGradient(g3x1,g3y1,g3x2,g3y2);
    g3.addColorStop(0, 'rgba(255,255,255,0.5)');
    g3.addColorStop(1, 'rgba(255,255,255,0)');

    ctx.beginPath();
    ctx.arc(250, 250, 212, 0, 2 * Math.PI);
    ctx.fillStyle = g3;
    ctx.fill();
    ctx.closePath();
    }


    /** Simple svg path parser that only understands M (move to) and L (line to). */
    function drawPath(ctx,path,fill,ang) {
    ctx.save();
    ctx.rotate(ang == undefined ? 0 : ang * Math.PI / 180.0);
    ctx.beginPath();

    var parts = path.split(' ');
    while (parts.length > 0) {
    var part = parts.shift();
    if (part == 'M') {
    coords = parts.shift().split(',');
    ctx.moveTo(coords[0], coords[1]);
    } else if (part == 'L') {
    continue;
    } else if (part == 'Z') {
    break;
    } else if (part.indexOf(',') >= 0) {
    coords = part.split(',');
    ctx.lineTo(coords[0], coords[1]);
    }
    }

    ctx.closePath();
    ctx.fillStyle = (fill == undefined ? '#000' : fill);
    ctx.fill();
    ctx.restore();
    }
    </script>
    </body>
    </html>


    فایل های ضمیمه فایل های ضمیمه

تاپیک های مشابه

  1. پاسخ: 4
    آخرین پست: سه شنبه 27 فروردین 1392, 14:31 عصر
  2. پاسخ: 0
    آخرین پست: چهارشنبه 21 فروردین 1392, 13:02 عصر
  3. پاسخ: 1
    آخرین پست: سه شنبه 12 بهمن 1389, 11:03 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •