有没有js大神啊,求助js算法 105

我要做的就是类似图片的效果,先进去的先出来,但是我是用canvas画图,所以第一个需要把后面的都加起来计算开始的位置,我的逻辑可能有点烂,有不明白的地方可以随时交流<ca... 我要做的就是类似图片的效果,先进去的先出来,但是我是用canvas画图,所以第一个需要把后面的都加起来计算开始的位置,我的逻辑可能有点烂,有不明白的地方可以随时交流 <canvas id="myCanvas" style="border:1px solid blue;margin:100px;" height="400" width="300"></canvas><script> var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d');//这里是data,见下面 drawImg(); var startY = 30,num=0,arr=[]; var timer=setInterval(function () { ctx.clearRect(0, 0, 400, 400); drawImg(); arr.push(data[num].len); //start; for (var j = 0; j < arr.length; j++) { startY = 10; for (var i = 0; i < arr.length -1 - j; i++) { startY += arr[arr.length - 1 - i]; if (startY > 100) { arr.shift(); //当startY大于100的时候,arr数组中的第一个元素去掉,然后从新开始循环,就是从start那里从新走一遍,这是我的思路,如果你有好的思路也可以 } } //if (startY > 100) { // arr.shift(); // data.shift();//这种貌似可以实现,当我需要上面的解法,这种放到项目中是行不通的 // num--; // continue; //} else { console.log(startY) //console.log(j) ctx.save(); ctx.beginPath(); ctx.strokeStyle = data[j].color; ctx.translate(20, 19); ctx.lineWidth = 38; ctx.moveTo(50, startY); ctx.lineTo(50, startY + arr[j]); ctx.fillStyle = "red"; ctx.fillText(data[j].color, 90, startY + 10);//暂时的标记 ctx.closePath; ctx.stroke(); ctx.restore(); // } } num++; // console.log(num) if (num == 4) { //clearInterval(timer); } }, 1000) function drawImg() { ctx.beginPath(); ctx.moveTo(50, 30); ctx.lineTo(50, 100); ctx.moveTo(90, 30); ctx.lineTo(90, 100); ctx.closePath(); ctx.stroke(); }</script>
大家可以把下面的代码拷过去修改,下面是我自己写的,谢谢啦
展开
 我来答
可耐滴哲宝
2018-01-09
知道答主
回答量:22
采纳率:100%
帮助的人:6.2万
展开全部
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    
    <script src="script/jquery-1.10.0.js"></script>
    <style>
        html, body {
            height:100%;
            width:100%;
        }
        * {
            padding:0;
            margin:0;
        }
    </style>
</head>
<body> 
    <canvas id="myCanvas" style="border:1px solid blue;margin:100px;" height="400" width="300"></canvas>
</body>
</html>
<script>
    var canvas = document.getElementById('myCanvas');
    var ctx = canvas.getContext('2d');
    var data = [{ len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'black' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }, { len: 6, color: 'red' }, { len: 7, color: 'yellow' }, { len: 8, color: 'blue' }, { len: 6, color: 'red' }, { len: 6, color: 'skyblue' }];
    drawImg();
    var startY = 30,num=0,arr=[];
    var timer=setInterval(function () {
        ctx.clearRect(0, 0, 400, 400);
        drawImg();
        arr.push(data[num].len);
        //start;
        for (var j = 0; j < arr.length; j++) {
            startY = 10;
            for (var i = 0; i < arr.length -1 - j; i++) {
                startY += arr[arr.length - 1 - i];
                if (startY > 100) {
                    arr.shift();
                    //当startY大于100的时候,arr数组中的第一个元素去掉,然后从新开始循环,就是从start那里从新走一遍
                }
            }
            //if (startY > 100) {
            //    arr.shift();
            //    data.shift();//这种貌似可以实现,当我需要上面的解法,这种放到项目中是行不通的
            //    num--;
            //    continue;
            //} else {
                console.log(startY)
                //console.log(j)
                ctx.save();
                ctx.beginPath();
                ctx.strokeStyle = data[j].color;
                ctx.translate(20, 19);
                ctx.lineWidth = 38;
                ctx.moveTo(50, startY);
                ctx.lineTo(50, startY + arr[j]);
                ctx.fillStyle = "red";
                ctx.fillText(data[j].color, 90, startY + 10);//暂时的标记
                ctx.closePath;
                ctx.stroke();
                ctx.restore();
           // }
            
        }
        num++;
       // console.log(num)
        if (num == 4) {
            //clearInterval(timer);
        }
    }, 1000)
    function drawImg() {
        ctx.beginPath();
        ctx.moveTo(50, 30);
        ctx.lineTo(50, 100);
        ctx.moveTo(90, 30);
        ctx.lineTo(90, 100);
        ctx.closePath();
        ctx.stroke();
    }
</script>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式