1024 开源“擂台”赛来了,听说奖品可以拿到手软

达尔文 发布于 10/21 18:03
阅读 7K+
收藏 12

 

又到了一年一度的 1024 程序员节,

这节,当然是要过的,这班,当然也还是要上的。

但是上区区一个班怎么能阻止我们对节日的向往呢!

在这个金秋十月硕果飘香的日子里,

小编为 1024 准备了一点小小的礼物,不成敬意~

 

花生棒pro

花生棒标准版

技术书籍

开源中国限量版T恤

开源马克杯

 

心动了吗?

怎么才能抱走他们呢?

嘿嘿,来开源中国参加【开源武林“擂台”赛】吧!

用实力一决高下~

 

擂台一:内力比拼

 

活动介绍:这是代码执行效果PK环节。参赛的各位选手在底部留言区留下一段可在此页面的 console 里运行的代码(注:要求 Chrome 浏览器),运行后的效果需要与“1024 程序员节”有关,可以是精彩的节日特效,也可以是暖心的节日祝福等,任你发挥!

留言要求主题名称+执行代码+效果预览截图(这样效果更加直观哦~)

示例

活动时间:10月22日-10月23日

评选规则

1、初选:23日 18:00 之后由工作人员选出优秀的20位进入决赛

2、决赛:24日在【擂台三:颜值大赏】公布进入决赛的名单,并由观众投票选出最优秀的前10名送出奖品

奖品设置

一等奖 1 名:花生棒 pro*1

二等奖 2 名:花生棒标准版*1

三等奖 3 名:技术图书*1+限量版t恤*1+开源马克杯*1

鼓励奖 4 名:技术图书*1

 

擂台二:意念切磋

敬请期待......

 

擂台三:颜值大赏

敬请期待......

 

我们是谁?

程序猿!

我们的节日是哪一天?

1024!

我们要怎么庆祝?

新需求不接!旧 Bug 不改!

不对不对,我们要参加开源中国“擂台”赛!为自己打 Call!

快来吧,底部留言等你来放大招哟~

加载中
3
夏夜微凉
夏夜微凉

$('.p-question-detail').css('transform','rotateX(180deg)');     

$('.p-question-detail').css('-webkit-transform','rotateX(180deg)');     

$('.p-question-detail').css('-moz-transform','rotateX(180deg)');

三行代码权当娱乐

ITxiaoniu
ITxiaoniu
这是什么毒
dafengchui
dafengchui
有毒诶
monr
monr
社会社会,吓得我赶紧把电脑倒过来
岁月的云
岁月的云
有毒
挪鸡鸭
挪鸡鸭
有毒
下一页
3
Lison-Liou
Lison-Liou

主题名称:1024节送你多金多祝福(翻出老码改一改,其实我就这水平了)

执行代码:

/**
 * author @Lison-Liou
 *
 * @url https://lison.cc/552.html
 * @type {string}
 *
 *
 * //红色选择六个数 1-33里选
 * //蓝色选择一个数 1-16里选
 *
 */


var css = "html{font-size:12px;font-family:\"sans serif\",tahoma,verdana,helvetica}body{text-align:center;padding-top:20%}#pool{padding:10px;border:dashed 1px orangered;width:40%;min-height:200px;margin-left:auto;margin-right:auto;max-height:200px;overflow:auto;overflow-y:yes}#pool span{font-size:24px;line-height:36px}#pool .red{color:indianred}#pool .blue{color:dodgerblue}.red{color:indianred}.blue{color:dodgerblue}.green{color:forestgreen}.purple{color:mediumpurple}.pink{color:deeppink}.dark{color:black}.yellow{color:yellowgreen}";
var html = "<div><h1 class=\"title\" id=\"title\">1024节日祝福 送你海多双色球 多金多到数不完</h1></div><br/><div id=\"pool\"></div><br/><button id=\"lotty\">LOTTY ME~!</button><button id=\"scroll\">SCROLL@</button><button id=\"clear\">CLEAR^</button>";

var ticket = {};

function init() {
    var head = document.head;
    var body = document.body;

    head.innerHTML = "<style type=\"text/css\">" + css + "</style>";
    body.innerHTML = html;

    var btn = document.getElementById('lotty');

//摇奖按钮事件
    btn.addEventListener('click', function () {

        reset_ticket();
        for (var i = 0; i < 6; i++) {
            ticket['red'].push(Math.floor(Math.random() * 33 + 1));
        }

        ticket['blue'] = Math.floor(Math.random() * 16 + 1);

        append_pull(ticket);
    });

//自动滚动生成
    var scroll = document.getElementById("scroll");
    var interval;
    scroll.addEventListener('click', function () {
        if (scroll.innerHTML == 'SCROLL@') {
            scroll.innerHTML = "PAUSE-";
            //开始滚动
            interval = setInterval(function () {
                btn.click();
            }, 1000);
        }
        else {
            scroll.innerHTML = "SCROLL@";
            clearInterval(interval);
        }
    });

    var clear = document.getElementById('clear');
    clear.addEventListener('click', function () {
        var pool = document.getElementById('pool');
        pool.innerHTML = '';
    });

    blink();
}


//title变换颜色class组
var colors = ['red', 'blue', 'green', 'purple', 'pink', 'dark', 'yellow'];

//闪烁标题
var blink = function () {
    var title = document.getElementById('title');
    var titles = title.innerHTML.split('');

    setInterval(function () {
        var html = '';
        for (var i = 0; i < titles.length; i++) {
            html += '<span class=' + colors[Math.floor(Math.random() * 7)] + '>' + titles[i] + '</span>';
        }
        title.innerHTML = html;
    }, 1000);
};

//生成结果滚动展示
function append_pull(ticket) {
    var pool = document.getElementById('pool');
    pool.innerHTML = pool.innerHTML + "<span class=\'red\'>" + ticket['red'].join("    ") + "</span><span class=\'blue\'>   (" + ticket['blue'] + ")</span><br />";

    setInterval(scroll_end(pool), 100);
    reset_ticket();
}

//重置ticket
function reset_ticket() {
    ticket = {};
    ticket['red'] = [];
    ticket['blue'] = null;
}

//滚动到对象底部
function scroll_end(e) {
    e.scrollTop = e.scrollHeight;
}

init();

效果预览截图

为什么我是第一个,哦我知道了,我是前锋炮灰

达尔文
达尔文
厉害了
2
宇润
宇润

主题:祝 1024 程序员节暴富!

执行代码:

var info = document.createElement("div");
info.style = 'top:0;position: absolute;width: 100%;font-family: monospace;text-align: center;z-index: 99999999999999999;background: linear-gradient(to right,rgba(78,170,76,.5),rgba(0,202,133,.5)),#4eaa4c;height: 100%;'
info.innerHTML = '<div style="top:0;position: absolute;z-index:999999;width:100%;text-align:center;background:rgba(0,0,0,0.2);color:#fff;line-height: 1rem;"><h1>祝 1024 程序员节暴富!</h1><p>背景是开源中国色</p></div>';
document.body.appendChild(info);
var canvas = document.createElement("canvas");
canvas.style='position: absolute;left: 0;top:0'
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
info.appendChild(canvas);
var context = canvas.getContext("2d"),
id = 1,
cwidth = 271,
cwidthhalf = cwidth / 2,
cheight = 140,
cheighthalf = cheight / 2,
particles = [],
Particle = function(a, b, c, d, e) {
    0 === d && (d = 2);
    var f = a % 1 * cwidth,
    g = Math.floor(a / 1) * cheight;
    this.update = function() {
        b += d;
        c += e;
        if (b < -cwidthhalf || b > canvas.width + cwidthhalf) {
            var a = particles.indexOf(this);
            particles.splice(a, 1);
            return ! 1
        }
        c > canvas.height - cheighthalf && (c = canvas.height - cheighthalf, e = 0.85 * -e);
        e += 0.98;
        context.drawImage(image, f, g, cwidth, cheight, Math.floor(b - cwidthhalf), Math.floor(c - cheighthalf), cwidth, cheight);
        return ! 0
    }
},
image = document.createElement("img");
image.src = "data:image/png;base64,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";
var throwCard = function(a, b) {
    0 < id ? id--:id = 0;
    var c = new Particle(id, a, b, 2 * Math.floor(6 * Math.random() - 3), 16 * -Math.random());
    particles.push(c)
};
document.addEventListener("mousedown",
function(a) {
    a.preventDefault();
    document.addEventListener("mousemove", onMouseMove, !1)
},
!1);
document.addEventListener("mouseup",
function(a) {
    a.preventDefault();
    throwCard(a.clientX, a.clientY);
    document.removeEventListener("mousemove", onMouseMove, !1)
},
!1);
function onMouseMove(a) {
    a.preventDefault();
    throwCard(a.clientX, a.clientY)
}
document.addEventListener("touchstart",
function(a) {
    a.preventDefault();
    for (var b = 0; b < a.changedTouches.length; b++) throwCard(a.changedTouches[0].pageX, a.changedTouches[0].pageY)
},
!1);
document.addEventListener("touchmove",
function(a) {
    a.preventDefault();
    for (var b = 0; b < a.touches.length; b++) throwCard(a.touches[b].pageX, a.touches[b].pageY)
},
!1);
function random(a, b) {
    var c = b - a,
    d = Math.random();
    return a + Math.round(d * c)
}
setInterval(function() {
    50 > particles.length && throwCard(random(0, canvas.clientWidth), random(200, canvas.clientHeight));
    for (var a = 0,
    b = particles.length; a < b;) particles[a].update() ? a++:b--
},
1E3 / 60);

效果预览截图:

(单张图无法表现出震撼,请自行运行代码!)

Chiroc
Chiroc
Wooh
达尔文
达尔文
亮瞎了:)
2
开源红薯烹调技术专家
开源红薯烹调技术专家

主题:薯傲天的祝福

来自薯傲天大大的 超位魔法 "1024的祝福 "  只能祝福上面的兄弟们了

来晚了!!代码也上不来了,只能截图了  哈哈~~ (用到了开源SVGA项目的动画框架和素材支持)

1
fly2xiang
fly2xiang

主题:祝你1024节日快乐

执行代码:

var $canvas = $('<canvas id="canvas"></canvas>');
$canvas.appendTo($('body'));
$('body').css({
    overflow: 'hidden'
});
$canvas.attr({
    width: window.innerWidth,
    height: window.innerHeight
});
$canvas.css({
    position: 'fixed',
    top: 0,
    left: 0,
    right: 0,
    bottom: 0,
    'z-index': 10000,
    'background': 'rgba(0, 0, 0, 0.8)'
});

window.requestAnimFrame = (function () {
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        function (callback) {
            window.setTimeout(callback, 1000 / 60);
        };
})();

var canvas = document.getElementById('canvas'),
    ctx = canvas.getContext('2d'),
    cw = window.innerWidth,
    ch = window.innerHeight,
    fireworks = [],
    particles = [],
    hue = 120,
    limiterTotal = 5,
    limiterTick = 0,
    timerTotal = 80,
    timerTick = 0,
    mousedown = false,
    mx,
    my;

canvas.width = cw;
canvas.height = ch;

function random(min, max) {
    return Math.random() * (max - min) + min;
}

function calculateDistance(p1x, p1y, p2x, p2y) {
    var xDistance = p1x - p2x,
        yDistance = p1y - p2y;
    return Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
}

function Firework(sx, sy, tx, ty) {
    this.x = sx;
    this.y = sy;
    this.sx = sx;
    this.sy = sy;
    
    this.tx = tx;
    this.ty = ty;
    
    this.distanceToTarget = calculateDistance(sx, sy, tx, ty);
    this.distanceTraveled = 0;
    
    this.coordinates = [];
    this.coordinateCount = 3;
    
    while (this.coordinateCount--) {
        this.coordinates.push([this.x, this.y]);
    }
    this.angle = Math.atan2(ty - sy, tx - sx);
    this.speed = 2;
    this.acceleration = 1.05;
    this.brightness = random(50, 70);
    
    this.targetRadius = 1;
}


Firework.prototype.update = function (index) {
    
    this.coordinates.pop();
    
    this.coordinates.unshift([this.x, this.y]);

    
    if (this.targetRadius < 8) {
        this.targetRadius += 0.3;
    } else {
        this.targetRadius = 1;
    }

    
    this.speed *= this.acceleration;

    
    var vx = Math.cos(this.angle) * this.speed,
        vy = Math.sin(this.angle) * this.speed;
    
    this.distanceTraveled = calculateDistance(this.sx, this.sy, this.x + vx, this.y + vy);

    
    if (this.distanceTraveled >= this.distanceToTarget) {
        createParticles(this.tx, this.ty);
        
        fireworks.splice(index, 1);
    } else {
        
        this.x += vx;
        this.y += vy;
    }
};


Firework.prototype.draw = function () {
    ctx.beginPath();
    
    ctx.moveTo(this.coordinates[this.coordinates.length - 1][0], this.coordinates[this.coordinates.length - 1][
        1
        ]);
    ctx.lineTo(this.x, this.y);
    ctx.strokeStyle = 'hsl(' + hue + ', 100%, ' + this.brightness + '%)';
    ctx.stroke();

    ctx.beginPath();
    
    ctx.arc(this.tx, this.ty, this.targetRadius, 0, Math.PI * 2);
    ctx.stroke();
};


function Particle(x, y) {
    this.x = x;
    this.y = y;
    
    this.coordinates = [];
    this.coordinateCount = 5;
    while (this.coordinateCount--) {
        this.coordinates.push([this.x, this.y]);
    }
    
    this.angle = random(0, Math.PI * 2);
    this.speed = random(1, 10);
    
    this.friction = 0.95;
    
    this.gravity = 1;
    
    this.hue = random(hue - 20, hue + 20);
    this.brightness = random(50, 80);
    this.alpha = 1;
    
    this.decay = random(0.015, 0.03);
}


Particle.prototype.update = function (index) {
    
    this.coordinates.pop();
    
    this.coordinates.unshift([this.x, this.y]);
    
    this.speed *= this.friction;
    
    this.x += Math.cos(this.angle) * this.speed;
    this.y += Math.sin(this.angle) * this.speed + this.gravity;
    
    this.alpha -= this.decay;

    
    if (this.alpha <= this.decay) {
        particles.splice(index, 1);
    }
};




Particle.prototype.draw = function () {

    ctx.beginPath();

    ctx.moveTo(this.coordinates[this.coordinates.length - 1][0], this.coordinates[this.coordinates.length - 1][
        1
        ]);
    ctx.lineTo(this.x, this.y);
    ctx.strokeStyle = 'hsla(' + this.hue + ', 100%, ' + this.brightness + '%, ' + this.alpha + ')';
    ctx.stroke();

};


function createParticles(x, y) {
    
    var particleCount = 30;
    while (particleCount--) {
        particles.push(new Particle(x, y));
    }
}


function loop() {
    
    requestAnimFrame(loop);

    
    hue += 0.5;

    
    
    
    ctx.globalCompositeOperation = 'destination-out';
    
    ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
    ctx.fillRect(0, 0, cw, ch);
    
    
    ctx.globalCompositeOperation = 'lighter';

    var text = "HAPPY 1024 DAY !";
    ctx.font = "50px sans-serif";
    var textData = ctx.measureText(text);
    ctx.fillStyle = "rgba(" + parseInt(random(0, 255)) + "," + parseInt(random(0, 255)) + "," + parseInt(random(0,
        255)) + ",0.3)";
    ctx.fillText(text, cw / 2 - textData.width / 2, ch / 2);

    
    var i = fireworks.length;
    while (i--) {
        fireworks[i].draw();
        fireworks[i].update(i);
    }

    
    var i = particles.length;
    while (i--) {
        particles[i].draw();
        particles[i].update(i);
    }

    
    if (timerTick >= timerTotal) {
        if (!mousedown) {
            

            for (var h = 0; h < 50; h++) {
                fireworks.push(new Firework(cw / 2, ch / 2, random(0, cw), random(0, ch)));
            }

            timerTick = 0;
        }
    } else {
        timerTick++;
    }

    
    if (limiterTick >= limiterTotal) {
        if (mousedown) {
            
            fireworks.push(new Firework(cw / 2, ch / 2, mx, my));
            limiterTick = 0;
        }
    } else {
        limiterTick++;
    }
}



canvas.addEventListener('mousemove', function (e) {
    mx = e.pageX - canvas.offsetLeft;
    my = e.pageY - canvas.offsetTop;
});


canvas.addEventListener('mousedown', function (e) {
    e.preventDefault();
    mousedown = true;
});

canvas.addEventListener('mouseup', function (e) {
    e.preventDefault();
    mousedown = false;
});

loop();

执行效果预览截图:

HAPPY 1024 DAY !

av
av
不错
达尔文
达尔文
Cool!!!!
1
寒川
寒川

主题名称:黑客帝国1024 oschina

执行代码:

var canvas = document.createElement("canvas");
canvas.style='position: absolute;left: 0;top:0;z-index:999;';
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
document.body.appendChild(canvas);
var ctx = canvas.getContext('2d');
var texts = '1024 oschina'.split('');
var fontSize = 16;
var columns = canvas.width/fontSize;
var drops = [];
for(var x = 0; x < columns; x++){
    drops[x] = 1;
}

function draw(){
    ctx.fillStyle = 'rgba(0, 0, 0, 0.05)';
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.fillStyle = '#0F0';
    ctx.font = fontSize + 'px arial';
    for(var i = 0; i < drops.length; i++){
        var text = texts[Math.floor(Math.random()*texts.length)];
        ctx.fillText(text, i*fontSize, drops[i]*fontSize);

        if(drops[i]*fontSize > canvas.height || Math.random() > 0.95){
            drops[i] = 0;
        }

        drops[i]++;
    }
}

setInterval(draw, 33);

效果预览截图:

aron1992
aron1992
这个好
1
小水熊
小水熊
for(var i=0;i<=1024;i++)alert('哈哈:'+i);

卡死了,截图没能发上来,抱歉。

dafengchui
dafengchui
快回去睡觉,尬
达尔文
达尔文
有毒
1
正在加载2
正在加载2

菜鸟小试牛刀~简单地祝大家1024节日快乐 

let letsBegin = function () {
    console.log('letsBegin')

    let clientWidth = document.documentElement.clientWidth
    let clientHeight = document.documentElement.clientHeight

    let $body = $(document.body)
    $body.html(
'<canvas id="canvas"></canvas>' +
'<div id="cover" style="position: fixed;z-index: 1000;background-color: rgba(0, 0, 0, 0);width: 100%;height: 100%;top: 0;left: 0;display: flex;align-items: center;color: white;">' +
    '<div id="coverInner" style="width: 100%;text-align: center;">祝大家1024程序员节快乐!!!</div>' +
'</div>'
    )
    $body.css("background-color", "black");
    $body.css("margin", "0");
    $body.css("overflow", "hidden");

    let $cover = $('#cover')
    let $coverInner = $('#coverInner')



    //
    const PHI = (1 + Math.sqrt(5)) / 2, // 1.618033988749895
        maxGeneration = (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) ? 5 : 6,
        frameDuration = 1000 / 60,
        duration = 3000,
        rotationSpeed = 0.3,
        totalIterations = Math.floor(duration / frameDuration),
        maxBaseSize = 100,
        baseSizeSpeed = 0.02;

    var canvas = document.getElementById("canvas"),
        ctx = canvas.getContext("2d"),
        canvasWidth = document.documentElement.clientWidth,
        canvasHeight = document.documentElement.clientHeight,
        shapes = [],
        sizeVariation,
        iteration = 0,
        animationDirection = 1,
        sizeVariationRange = .15,
        baseRotation = 0,
        baseSize = 50,
        c1 = 43,
        c1S = 1,
        c2 = 205,
        c2S = 1,
        c3 = 255,
        c3S = 1;

    canvas.setAttribute("width", canvasWidth);
    canvas.setAttribute("height", canvasHeight);

    function Shape(gen, x, y, size, rotation) {
        this.generation = gen;
        this.size = size;
        this.rotation = -rotation;
        this.start = {
            x: x,
            y: y
        };
        this.end = {
            x_1: this.start.x + Math.cos(degToRad(this.rotation)) * this.size,
            y_1: this.start.y + Math.sin(degToRad(this.rotation)) * this.size,
            x_2: this.start.x + Math.cos(degToRad(this.rotation + 360 / 3)) * this.size,
            y_2: this.start.y + Math.sin(degToRad(this.rotation + 360 / 3)) * this.size,
            x_3: this.start.x +
            Math.cos(degToRad(this.rotation + 360 / 3 * 2)) * this.size,
            y_3: this.start.y + Math.sin(degToRad(this.rotation + 360 / 3 * 2)) * this.size
        };

        this.init();
    }

    Shape.prototype.init = function() {
        if (this.generation < maxGeneration) {
            var gen = this.generation + 1,
                newSize = this.size * sizeVariation,
                newRotation = this.rotation;

            shapes.push(
                new Shape(gen, this.end.x_1, this.end.y_1, newSize, newRotation)
            );
            shapes.push(
                new Shape(gen, this.end.x_2, this.end.y_2, newSize, newRotation)
            );
            shapes.push(
                new Shape(gen, this.end.x_3, this.end.y_3, newSize, newRotation)
            );
        }
        this.draw();
    };

    Shape.prototype.draw = function() {
        ctx.beginPath();
        ctx.moveTo(this.start.x, this.start.y);
        ctx.lineTo(this.end.x_1, this.end.y_1);
        ctx.moveTo(this.start.x, this.start.y);
        ctx.lineTo(this.end.x_2, this.end.y_2);
        ctx.moveTo(this.start.x, this.start.y);
        ctx.lineTo(this.end.x_3, this.end.y_3);
        //ctx.closePath();
        ctx.strokeStyle =
            "rgba(" + c1 + "," + c2 + "," + c3 + "," + 1 / this.generation / 5 + ")";
        ctx.stroke();
        //ctx.fill();
    };

    function animate() {
        //ctx.clearRect(0, 0, canvasWidth, canvasHeight);
        ctx.globalCompositeOperation = "source-over";
        ctx.fillStyle = "rgba(0,0,0,.1)";
        ctx.fillRect(0, 0, canvasWidth, canvasHeight);
        ctx.globalCompositeOperation = "lighter";
        shapes = [];
        shapes.push(
            new Shape(0, canvasWidth / 2, canvasHeight / 2, baseSize, baseRotation)
        );

        changeColor();
        iteration++;
        if (baseSize < maxBaseSize) baseSize += baseSizeSpeed;
        baseRotation += rotationSpeed;
        sizeVariation = easeInOutSine(
            iteration,
            1 - sizeVariationRange * animationDirection,
            sizeVariationRange * 2 * animationDirection,
            totalIterations
        );
        if (iteration >= totalIterations) {
            iteration = 0;
            animationDirection *= -1;
        }
        requestAnimationFrame(animate);
    }

    function degToRad(deg) {
        return Math.PI / 180 * deg;
    }

    function easeInOutSine(
        currentIteration,
        startValue,
        changeInValue,
        totalIterations
    ) {
        return (
            changeInValue /
            2 *
            (1 - Math.cos(Math.PI * currentIteration / totalIterations)) +
            startValue
        );
    }

    function changeColor() {
        if (c1 == 0 || c1 == 255) c1S *= -1;
        if (c2 == 0 || c2 == 255) c2S *= -1;
        if (c3 == 0 || c3 == 255) c3S *= -1;
        c1 += 1 * c1S;
        c2 += 1 * c2S;
        c3 += 1 * c3S;
    }

    ctx.globalCompositeOperation = "lighter";
    animate();

    window.addEventListener("resize", function() {
        canvasWidth = document.documentElement.clientWidth;
        canvasHeight = document.documentElement.clientHeight;

        canvas.setAttribute("width", canvasWidth);
        canvas.setAttribute("height", canvasHeight);
        ctx.strokeStyle = "rgba(66,134,240,.3)";
        ctx.globalCompositeOperation = "lighter";
    });
}

//*******************万恶的分割线*******************
let genMessage = function ($message) {
    return ''
}
//
document.body.innerHTML = '今天是2018年10月24号,祝大家节日快乐 !!!'

//
let script= document.createElement("script");
script.type="text/javascript";
script.src="https://code.jquery.com/jquery-3.3.1.min.js";
document.getElementsByTagName('head')[0].appendChild(script);

//
setTimeout(function () {
    document.body.innerHTML = '请耐心等待三秒钟 ^_^'
    setTimeout(function () {
        let countInterval = 3
        let interval = null
        interval = setInterval(function() {
            if (countInterval > 0) {
                document.body.innerHTML = '' + countInterval
                countInterval--
            } else {
                clearInterval(interval)
                letsBegin()
            }
        }, 1000)
    }, 1000)
}, 3000)

dafengchui
dafengchui
你们这些事怎么学的,js 为什么我做不到,也没有说console操作代码
且无需多言
且无需多言
炫酷
1
wuyiw
wuyiw

打个酱油, 预览图只是截了开头 

const GRAPH_META = {
    charWidth: 3,
    charHeight: 5,
    charGraph: {
        0: [1, 0, 3, 6, 9, 12, 13, 14, 11, 8, 5, 2],
        1: [2, 5, 8, 11, 14],
        2: [0, 1, 2, 5, 8, 7, 6, 9, 12, 13, 14],
        4: [0, 3, 6, 7, 2, 5, 8, 11, 14],
        o: [1, 0, 3, 6, 9, 12, 13, 14, 11, 8, 5, 2],
        s: [2, 1, 0, 3, 6, 7, 8, 11, 14, 13, 12],
        c: [2, 1, 0, 3, 6, 9, 12, 13, 14],
        i: [1, 4, 7, 10, 13],
        u: [0, 3, 6, 9, 12, 13, 14, 11, 8, 5, 2],
    },
    subjects: ['1024', 'osc', 'i'],
    objects: ['1024', 'osc', 'u'],
    heartWidth: 9,
    heartHeight: 8,
    heartGraph: [3, 5, 2, 6, 10, 16, 18, 26, 27, 35, 37, 43, 47, 51, 57, 59, 67],
    heartCenter: {
        left: 4,
        top: 1
    },
}
const LAYOUT_META = {
    padding: 5,
    letterSpacing: 2,
    lineSpacing: 2,
}
Object.assign(LAYOUT_META, {
    innerWidth: GRAPH_META.charWidth * 4 + LAYOUT_META.letterSpacing * 3,
    innerHeight: GRAPH_META.charHeight * 2 + GRAPH_META.heartHeight + LAYOUT_META.lineSpacing * 2,
})
Object.assign(LAYOUT_META, {
    width: LAYOUT_META.innerWidth + (LAYOUT_META.padding) * 2,
    height: LAYOUT_META.innerHeight + (LAYOUT_META.padding) * 2,
})
Object.assign(LAYOUT_META, {
    widthInterval: 100 / LAYOUT_META.width,
    heightInterval: 100 / LAYOUT_META.height,
})
Object.assign(LAYOUT_META, {
    center: {
        innerLeft: LAYOUT_META.innerWidth / 2 - .5,
        innerTop: GRAPH_META.charHeight + LAYOUT_META.lineSpacing + 1,
    },
    width: LAYOUT_META.innerWidth + (LAYOUT_META.padding) * 2,
    height: LAYOUT_META.innerHeight + (LAYOUT_META.padding) * 2,
})
Object.assign(LAYOUT_META.center, {
    left: `${ LAYOUT_META.widthInterval * (LAYOUT_META.center.innerLeft + LAYOUT_META.padding) }%`,
    top: `${ LAYOUT_META.heightInterval * (LAYOUT_META.center.innerTop + LAYOUT_META.padding) }%`,
})

class AvatarFetcher {
    urls = new Set()
    myUrl = ''

    reUrlDim = /_\d{1,3}(?=.(jpe?g|png|gif))|!\/(both|sq)\/.*/
    domParser = new DOMParser()

    constructor () {
        const myAvatar = document.querySelector('.current-user-avatar img')
        if (myAvatar) {
            this.myUrl = this.toLarge(myAvatar.src)
        }
    }

    async *get (p = 1) {
        while (true) {
            const res = await fetch(`${ location.origin }${ location.pathname }?p=${ p }`, {
                headers: { 'X-PJAX': 'true' }
            })
                .then(res => res.text())
            const doc = this.domParser.parseFromString(res, 'text/html')
            const imgEls = Array.from(doc.querySelectorAll('.osc-avatar img'));
            if (imgEls.length) {
                const imgUrls = imgEls.map(el => this.toLarge(el.src))
                    .filter(
                        (url, i, arr) => url !== this.myUrl
                            && i === arr.indexOf(url)
                            && !this.urls.has(url))
                yield imgUrls
                imgUrls.forEach(url => this.urls.add(url))
                p++
            } else {
                break
            }
        }
    }

    toLarge (url) {
        return url.replace(/!\/(both|sq)\/.*/, '')
            .replace(/_\d{1,3}(?=.(jpe?g|png|gif))/, '_100')
    }
}

class Img {
    defaultUrl = 'data:image/svg+xml,<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="23px" height="24px" viewBox="0 0 23 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g id="%E4%B8%AA%E4%BA%BA%E7%A9%BA%E9%97%B4" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="%E4%B8%AA%E4%BA%BA%E7%A9%BA%E9%97%B4_%E8%87%AA%E5%B7%B1_%E5%B1%95%E5%BC%80%E6%B7%BB%E5%8A%A0" transform="translate(-19.000000, -8.000000)" fill="%233dab53"><g id="top-bar"><path d="M30.5512831,24.5218136 C28.0855414,24.5385007 26.0671958,22.9057702 25.9308737,19.8666285 C25.8041591,17.0389438 28.2551001,15.1293114 30.614121,15.0727317 C33.3257618,15.0078083 34.9463066,18.1280391 34.9463066,18.1280391 L41.9335268,15.5253698 C41.9335268,15.5253698 39.0595979,8 31.283787,8 C24.0148346,8 18.9997403,13.0924398 19,19.9951714 C19.0002597,26.1321207 23.7333619,32.2732417 31.1147476,31.9906036 C39.222665,31.6795452 42,24.4764454 42,24.4764454 L34.8336137,22.0886228 C34.8336137,22.0886228 33.3709428,24.5218136 30.5512831,24.5218136 L30.5512831,24.5218136 Z" id="logo"></path></g></g></g></svg>'
    el = document.createElement('img')
    src = ''

    constructor (src, center = false) {
        this.src = src || this.defaultUrl
        this.el.classList.add('the-1024-avatar')
        if (center) {
            this.el.style.left = LAYOUT_META.center.left
            this.el.style.top = LAYOUT_META.center.top
        } else {
            this.el.style.left = `${ LAYOUT_META.widthInterval
                * (LAYOUT_META.padding + (LAYOUT_META.innerWidth - 1) * Math.random()) }%`
            this.el.style.top = `${ LAYOUT_META.heightInterval
                * (LAYOUT_META.padding + (LAYOUT_META.innerHeight - 1) * Math.random()) }%`
        }
    }

    async load () {
        return new Promise(resolve => {
            this.el.addEventListener('load', () => {
                this.el.classList.add('the-1024-avatar-loaded')
                resolve()
            })
            this.el.addEventListener('error', () => {
                if (this.el.src !== this.defaultUrl) {
                    this.el.src = this.defaultUrl
                } else {
                    console.warn(`failed to load img: ${ this.el.src }`)
                    resolve() // continue any way
                }
            })
            this.el.src = this.src
        })
    }
}

class The1024 {
    style = document.createElement('style')
    wrapper = document.createElement('div')
    container = document.createElement('div')

    avatarImgs = []

    constructor () {
        this.style.innerHTML = `
        .the-1024-wrapper {
            position: fixed;
            z-index: 10088;
            width: 100vw;
            height: 100vh;
            top: 0;
            left: 0;
            background: #000000ee;
        }
        
        .the-1024-container {
            position: fixed;
            z-index: 10090;
            width: 100vw;
            height: 100vh;
            max-width: calc(100vh / ${LAYOUT_META.height } * ${ LAYOUT_META.width });
            max-height: calc(100vw / ${LAYOUT_META.width } * ${ LAYOUT_META.height });
            top: 50%;
            left: 50%;
            transform: translate3d(-50%, -50%, 0);
        }
        
        .the-1024-avatar {
            transition: .5s ease-in;
            background-color: #fff;
            opacity: .6;
            border-radius: 50%;
            width: calc(100% / ${LAYOUT_META.width });
            height: calc(100% / ${LAYOUT_META.height });
            position: absolute;
        }
        
        .the-1024-avatar-loaded {
            opacity: 1;
        }
        
        .the-1024-dim {
            animation: dim 2s 1 forwards;
        }
        @keyframes dim {
            0% {
                background: #00000000;
            }
            100% {
                background: #000000ee;
            }
        }
        
        .the-1024-loading {
            animation: loading 4s infinite linear backwards;
        }
        @keyframes loading {
            0% {
                box-shadow: inset 0 0 15vw #666;
            }
            50% {
                box-shadow: inset 0 0 15vw #aaa;
            }
            100% {
                box-shadow: inset 0 0 15vw #666;
            }
        }
        `
        this.wrapper.classList.add('the-1024-wrapper', 'the-1024-loading')
        this.container.classList.add('the-1024-container')
        document.body.appendChild(this.style)
        this.wrapper.appendChild(this.container)
        document.body.appendChild(this.wrapper)
    }

    async run () {
        await this.loadAvatars()
        this.wrapper.classList.remove('the-1024-loading')
        setTimeout(() => this.step(), 1e3)
    }

    async loadAvatars () {
        return new Promise(async resolve => {
            const avatarFetcher = new AvatarFetcher()
            const avatarPromises = []
            for await (const urls of avatarFetcher.get()) {
                urls.forEach(url => {
                    const imgEl = new Img(url)
                    this.avatarImgs.push(imgEl)
                    this.container.appendChild(imgEl.el)
                    setTimeout(() => avatarPromises.push(imgEl.load()), 5e2)
                })
            }
            const imgEl = new Img(avatarFetcher.myUrl, true)
            imgEl.el.style.zIndex = 10099
            this.container.appendChild(imgEl.el)
            setTimeout(() => avatarPromises.push(imgEl.load()), 5e2)
            await Promise.all(avatarPromises)
            this.avatarImgs.forEach((avatarImg, i) => setTimeout(() => {
                avatarImg.el.style.left = LAYOUT_META.center.left
                avatarImg.el.style.top = LAYOUT_META.center.top
            }, 5e1 * i))
            setTimeout(() => {
                console.log('avatars loaded')
                resolve()
            }, this.avatarImgs.length * 5e1)
        })
    }

    step () {
        const subject = this.getRandom(GRAPH_META.subjects)
        let object = this.getRandom(GRAPH_META.objects)
        while ((subject === 'i' && object === 'u')
            || subject === object) {
            object = this.getRandom(GRAPH_META.objects)
        }
        [subject, object].map(word => word.split(''))
            .forEach((chars, isObject) => {
                chars.forEach((char, i, arr) => {
                    const leftOffset = (LAYOUT_META.innerWidth
                        - arr.length * GRAPH_META.charWidth
                        - (arr.length - 1) * LAYOUT_META.letterSpacing) / 2
                    const topOffset = GRAPH_META.charHeight + LAYOUT_META.lineSpacing * 2 + GRAPH_META.heartHeight
                    GRAPH_META.charGraph[char].forEach((pixelIdx) => {
                        this.setTransform(this.getRandomAvatar(), this.getTransform(leftOffset + (GRAPH_META.charWidth + LAYOUT_META.letterSpacing) * i + pixelIdx % GRAPH_META.charWidth
                            , topOffset * isObject + Math.floor(pixelIdx / GRAPH_META.charWidth)))
                    })
                })
            })
        GRAPH_META.heartGraph.forEach(heartIdx => {
            this.setTransform(this.getRandomAvatar(), `translate3d(${
                100 * (heartIdx % GRAPH_META.heartWidth - GRAPH_META.heartCenter.left)
                }%, ${
                100 * (Math.floor(heartIdx / GRAPH_META.heartWidth) - GRAPH_META.heartCenter.top)
                }%, 0)`)
        })
        setTimeout(() => this.step(), 4e3)
    }

    getRandom (arr) {
        const idx = Math.floor(Math.random() * arr.length)
        return arr[idx]
    }

    getRandomAvatar () {
        const avatarImgEl = this.getRandom(this.avatarImgs).el.cloneNode()
        this.container.appendChild(avatarImgEl)
        setTimeout(() => avatarImgEl.style.transform = '', 2e3)
        setTimeout(() => avatarImgEl.remove(), 3e3)
        return avatarImgEl
    }

    getTransform (innerLeft, innerTop) {
        return `translate3d(${
            100 * (innerLeft - LAYOUT_META.center.innerLeft)
            }%, ${
            100 * (innerTop - LAYOUT_META.center.innerTop)
            }%, 0)`
    }

    setTransform (el, transform) {
        setTimeout(() => el.style.transform = transform, 1e2)
    }
}

const the1024 = new The1024()
the1024.run()

 

返回顶部
顶部