1. 程式人生 > >js canvas逐個打字並畫心形

js canvas逐個打字並畫心形

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name ="viewport"content ="width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable = 0"/>
<title>test</title>
<style type="text/css">
html, body {
    width: 100%;
    height: 100%;
    background: #ffffec;
}

* {
    margin: 0;
    padding: 0;
}
.body{
    display: flex;
}
.left{
      display: inline-block;
    margin-top: 60px;
    margin-left: 30px;
    width: 300px;
}
.code{

  
}
#garden{
   margin-top: 60px;
    flex: 1;
    max-width: 600px;
    text-align: center;
    margin: 0 auto;
}
</style>
</head>
<!--   <body onload="defaultUrl()"> -->
<body >
    <div class="body">
    <div class="left">
        <div><span class="timeElapse"></span></div>
        <div class="code">
            <span>這是測試啊</span>
             <span>漸變可以填充在矩形, 圓形, 線條, 文字等等, 各種形狀可以自己定義不同的顏色。

以下有兩種不同的方式來設定Canvas漸變:

createLinearGradient(x,y,x1,y1) - 建立線條漸變
createRadialGradient(x,y,r,x1,y1,r1) - 建立一個徑向/圓漸變
當我們使用漸變物件,必須使用兩種或兩種以上的停止顏色。

addColorStop()方法指定顏色停止,引數使用座標來描述,可以是0至1.

使用漸變,設定fillStyle或strokeStyle的值為 漸變,然後繪製形狀,如矩形,文字,或一條線。

使用 createLinearGradient(): </span>
        </div>
    </div>
    <img style="display:none" id="pic" src="img/heart.jpg" alt="The Scream"  width="10" height="10" />
    <canvas id="garden"></canvas>
    </div>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/garden.js"></script>
<script>
    var offsetX = $("#loveHeart").width() / 2;
    var offsetY = $("#loveHeart").height() / 2 - 55;
     var canvas=$('#garden')[0];
        canvas.width=600;
     canvas.height=500;
     var gardenCtx = canvas.getContext("2d");
      gardenCtx.beginPath();  //開始繪圖
        gardenCtx.translate(250,250);  //設定繪圖原點

   var pic=document.getElementById("pic");;
    (function($){
        $.fn.test=function(){
                this.each(function() {
                    var $ele=$(this),str=$ele.html(),progress=0;
                    $ele.html('');
                    var timer=setInterval(function(){
                        var current = str.substr(progress, 1);//從開始擷取的長度
                        if(current=='<'){
                             progress = str.indexOf('>', progress) + 1;//從某位置開始搜尋某字元
                        }
                        else{
                            progress++
                        }
                        //progress & 1 意思是2者做且運算,即progress%2==1為true
                        $ele.html(str.substring(0, progress)+ (progress & 1 ? '_' : ''));
                        if (progress >= str.length) {
                            clearInterval(timer);
                        }
                    }, 80);
                 });
                return this;//此處要寫,不然不能鏈式呼叫
           
           
        }
    })(jQuery);
    function timeElapse(){
        var StartTime='2018-11-10';
        var NowTime=new Date();
        var startGetTime=new Date(StartTime).getTime();
        var nowGetTime=NowTime.getTime();
        var chaTime=(nowGetTime-startGetTime)/1000;
        var day=Math.floor(chaTime/(3600*24));
        var hour=Math.floor((chaTime%(3600*24))/3600);
        var M=Math.floor(((chaTime%(3600*24))%3600)/60);
        var S=Math.floor((((chaTime%(3600*24))%3600)%60));
        var str=day+'天'+hour+'小時'+M+'分鐘'+S+'秒';
        $('.timeElapse').html(str);
    }
    //獲取點
    function getHeartPoint(angle) {
        // 桃心型線的引數方程: 
        // x = 16(sinθ)^3 
        // y = 13cosθ- 5 cos 2θ - 2 cos 3θ - cos 4θ 
        var t = angle / Math.PI;
        var x = 15* (16 * Math.pow(Math.sin(t), 3));
        var y = - 15 * (13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t));
        return new Array(offsetX + x, offsetY + y);
    }
    function startHeartAnimation() {
        var interval = 50;
        var angle = 10;
        var heart = new Array();
        var animationTimer = setInterval(function () {
            var bloom = getHeartPoint(angle);
                // gardenCtx.moveTo(bloom[0],bloom[1]);
                // gardenCtx.lineTo(bloom[0]+1,bloom[1]+1);
                // gardenCtx.stroke();
                gardenCtx.drawImage(pic,bloom[0],bloom[1],15,15);
                angle += 0.2;
                if(angle>=30){
                    clearInterval(animationTimer)
                }
         }, 50);
    }
    setInterval(function () {
        timeElapse();
    }, 1000);
    setTimeout(function () {
        startHeartAnimation();
    }, 1000);
    $('.code').test().css('color','#333');
    timeElapse();
    startHeartAnimation();
   
</script>
</body>

</html>

效果如下: 在這裡插入圖片描述