Share Code Tỏ tình trái tim đập của thủ khoa Lý Tuân

0

Mở đầu

Trái tim hồng ấm áp này được Lý Luân vẽ cho Chu Vân bằng code HTML. Sau đó vẫn không quên thách thức Chu Vân bằng cách kêu cô tự giải mã. Sở dĩ màn tỏ tình này hot và viral đến vậy là vì sự lãng mạn của cặp đôi này cùng với danh hiệu thủ khoa, học bá IT của Lý Luân.
Vậy nên trong bài viết này, mình sẽ hướng dẫn các bạn cùng nhau đu trend bằng cách tạo code hình trái tim và up lên web để gửi crush tỏ tình nhé. Đặc biệt ở cuối bài viết mình sẽ share code trái tim đập được cực kỳ giống của thủ khoa Lý nữa đó.

Code trái tym

Bạn Copy toàn bộ code bên dưới
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>

<HEAD>
    <TITLE>Xuan Trung I Love You</TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <!--[ Favicon ]-->
    <link href='https://i.imgur.com/Xtobhw3.png' rel='apple-touch-icon' sizes='120x120'/>
    <link href='https://i.imgur.com/Xtobhw3.png' rel='apple-touch-icon' sizes='152x152'/>
    <link href='https://i.imgur.com/Xtobhw3.png' rel='apple-touch-icon' sizes='40x40'/>
    <link href='https://i.imgur.com/Xtobhw3.png' rel='icon' type='image/x-icon'/>
    <link href='https://i.imgur.com/Xtobhw3.png' rel='shortcut icon' type='image/x-icon'/>    
    <style>
        html,
        body {
            overflow: hidden;
            padding: 0;
            margin: 0;
            background: #000;
        }
        
        canvas {
            position: absolute;
            width: 100%;
            height: 100%;
        }
        
        canvas {
            /* top: 50%;
            left: 50%; */
            z-index: 1;
            display: block;
            position: absolute;
            transform: translate(-50%, -50%);
            animation: heart 1.5s ease infinite
        }
        
        @keyframes heart {
            0% {
                transform: scale(1);
            }
            30% {
                transform: scale(.8);
            }
            /* 60% {
                transform: scale(1.2);
            } */
            100% {
                transform: scale(1);
            }
        }
    </style>
</HEAD>

<BODY>

    <canvas id="pinkboard">
        <canvas id="pinkboard">
        </canvas>
    </canvas>
    <script>
        /*
         * Settings
         */
        var settings = {
            particles: {
                length: 1500, // maximum amount of particles
                duration: 2, // particle duration in sec
                velocity: 135, // particle velocity in pixels/sec
                effect: -0.35, // play with this for a nice effect
                size: 14, // particle size in pixels
            },
        };

        /*
         * RequestAnimationFrame polyfill by Erik Möller
         */
        (function() {
            var b = 0;
            var c = ["ms", "moz", "webkit", "o"];
            for (var a = 0; a < c.length && !window.requestAnimationFrame; ++a) {
                window.requestAnimationFrame = window[c[a] + "RequestAnimationFrame"];
                window.cancelAnimationFrame = window[c[a] + "CancelAnimationFrame"] || window[c[a] + "CancelRequestAnimationFrame"]
            }
            if (!window.requestAnimationFrame) {
                window.requestAnimationFrame = function(h, e) {
                    var d = new Date().getTime();
                    var f = Math.max(0, 16 - (d - b));
                    var g = window.setTimeout(function() {
                        h(d + f)
                    }, f);
                    b = d + f;
                    return g
                }
            }
            if (!window.cancelAnimationFrame) {
                window.cancelAnimationFrame = function(d) {
                    clearTimeout(d)
                }
            }
        }());

        /*
         * Point class
         */
        var Point = (function() {
            function Point(x, y) {
                this.x = (typeof x !== 'undefined') ? x : 0;
                this.y = (typeof y !== 'undefined') ? y : 0;
            }
            Point.prototype.clone = function() {
                return new Point(this.x, this.y);
            };
            Point.prototype.length = function(length) {
                if (typeof length == 'undefined')
                    return Math.sqrt(this.x * this.x + this.y * this.y);
                this.normalize();
                this.x *= length;
                this.y *= length;
                return this;
            };
            Point.prototype.normalize = function() {
                var length = this.length();
                this.x /= length;
                this.y /= length;
                return this;
            };
            return Point;
        })();

        /*
         * Particle class
         */
        var Particle = (function() {
            function Particle() {
                this.position = new Point();
                this.velocity = new Point();
                this.acceleration = new Point();
                this.age = 0;
            }
            Particle.prototype.initialize = function(x, y, dx, dy) {
                this.position.x = x;
                this.position.y = y;
                this.velocity.x = dx;
                this.velocity.y = dy;
                this.acceleration.x = dx * settings.particles.effect;
                this.acceleration.y = dy * settings.particles.effect;
                this.age = 0;
            };
            Particle.prototype.update = function(deltaTime) {
                this.position.x += this.velocity.x * deltaTime;
                this.position.y += this.velocity.y * deltaTime;
                this.velocity.x += this.acceleration.x * deltaTime;
                this.velocity.y += this.acceleration.y * deltaTime;
                this.age += deltaTime;
            };
            Particle.prototype.draw = function(context, image) {
                function ease(t) {
                    return (--t) * t * t + 1;
                }
                var size = image.width * ease(this.age / settings.particles.duration);
                context.globalAlpha = 1 - this.age / settings.particles.duration;
                context.drawImage(image, this.position.x - size / 2, this.position.y - size / 2, size, size);
            };
            return Particle;
        })();

        /*
         * ParticlePool class
         */
        var ParticlePool = (function() {
            var particles,
                firstActive = 0,
                firstFree = 0,
                duration = settings.particles.duration;

            function ParticlePool(length) {
                // create and populate particle pool
                particles = new Array(length);
                for (var i = 0; i < particles.length; i++)
                    particles[i] = new Particle();
            }
            ParticlePool.prototype.add = function(x, y, dx, dy) {
                particles[firstFree].initialize(x, y, dx, dy);

                // handle circular queue
                firstFree++;
                if (firstFree == particles.length) firstFree = 0;
                if (firstActive == firstFree) firstActive++;
                if (firstActive == particles.length) firstActive = 0;
            };
            ParticlePool.prototype.update = function(deltaTime) {
                var i;

                // update active particles
                if (firstActive < firstFree) {
                    for (i = firstActive; i < firstFree; i++)
                        particles[i].update(deltaTime);
                }
                if (firstFree < firstActive) {
                    for (i = firstActive; i < particles.length; i++)
                        particles[i].update(deltaTime);
                    for (i = 0; i < firstFree; i++)
                        particles[i].update(deltaTime);
                }

                // remove inactive particles
                while (particles[firstActive].age >= duration && firstActive != firstFree) {
                    firstActive++;
                    if (firstActive == particles.length) firstActive = 0;
                }


            };
            ParticlePool.prototype.draw = function(context, image) {
                // draw active particles
                if (firstActive < firstFree) {
                    for (i = firstActive; i < firstFree; i++)
                        particles[i].draw(context, image);
                }
                if (firstFree < firstActive) {
                    for (i = firstActive; i < particles.length; i++)
                        particles[i].draw(context, image);
                    for (i = 0; i < firstFree; i++)
                        particles[i].draw(context, image);
                }
            };
            return ParticlePool;
        })();

        /*
         * Putting it all together
         */
        (function(canvas) {
            var context = canvas.getContext('2d'),
                particles = new ParticlePool(settings.particles.length),
                particleRate = settings.particles.length / settings.particles.duration, // particles/sec
                time;

            // get point on heart with -PI <= t <= PI
            function pointOnHeart(t) {
                return new Point(
                    160 * Math.pow(Math.sin(t), 3),
                    130 * Math.cos(t) - 50 * Math.cos(2 * t) - 20 * Math.cos(3 * t) - 10 * Math.cos(4 * t) + 25
                );
            }

            // creating the particle image using a dummy canvas
            var image = (function() {
                var canvas = document.createElement('canvas'),
                    context = canvas.getContext('2d');
                canvas.width = settings.particles.size;
                canvas.height = settings.particles.size;
                // helper function to create the path
                function to(t) {
                    var point = pointOnHeart(t);
                    point.x = settings.particles.size / 3 + point.x * settings.particles.size / 550;
                    point.y = settings.particles.size / 3 - point.y * settings.particles.size / 550;
                    return point;
                }
                // create the path
                context.beginPath();
                var t = -Math.PI;
                var point = to(t);
                context.moveTo(point.x, point.y);
                while (t < Math.PI) {
                    t += 0.01; // baby steps!
                    point = to(t);
                    context.lineTo(point.x, point.y);
                }
                context.closePath();
                // create the fill
                context.fillStyle = '#ea80b0';
                context.fill();
                // create the image
                var image = new Image();
                image.src = canvas.toDataURL();
                return image;
            })();

            // render that thing!
            function render() {
                // next animation frame
                requestAnimationFrame(render);

                // update time
                var newTime = new Date().getTime() / 1000,
                    deltaTime = newTime - (time || newTime);
                time = newTime;

                // clear canvas
                context.clearRect(0, 0, canvas.width, canvas.height);

                // create new particles
                var amount = particleRate * deltaTime;
                for (var i = 0; i < amount; i++) {
                    var pos = pointOnHeart(Math.PI - 2 * Math.PI * Math.random());
                    var dir = pos.clone().length(settings.particles.velocity);
                    particles.add(canvas.width / 2 + pos.x, canvas.height / 2 - pos.y, dir.x, -dir.y);
                }

                // update and draw particles
                particles.update(deltaTime);
                particles.draw(context, image);
            }

            // handle (re-)sizing of the canvas
            function onResize() {
                canvas.width = canvas.clientWidth;
                canvas.height = canvas.clientHeight;
            }
            window.onresize = onResize;

            // delay rendering bootstrap
            setTimeout(function() {
                onResize();
                render();
            }, 10);
        })(document.getElementById('pinkboard'));
    </script>
</BODY>

</HTML>

Đưa code lên website bằng Github

Bước 1: Truy cập vào Github tại đây.
Bạn đăng kí tài khoản Github nếu như chưa có tài khoản hoặc đăng nhập nếu đã có tài khoản. (cái này dễ lắm có thể đăng nhập bằng Google)

Sau khi vô trong Github bạn nhấn New để tạo dự án mới
Nó sẽ hiện ra trang như này, bạn tiến hành đặt trang dự án ở đây mình đặt heart cho lẹ ha
Đặt tên thích hợp xong thì kéo xuống dưới nhấn vô Create repository

Bước 2: Bạn nhấn vào Creating a new file


Bước 3: Bạn đặt tên file có đuôi là .html như mình đang đặt là index.html rồi dán code vừa Copy ở trên dán vào ô dưới. Sau cùng là nhấn vào Commit new file.
Oke vậy là tương đối đã up xong code vậy bây giờ để cho code bạn hiển thị thì cần thiết lập 1 số thứ như sau.

Bước 4: Mở tab Setting chọn thiết lập như bên dưới. Nhớ là phần Brach chọn main rồi nhấn Save nha.
Vậy là xong rồi đó việc cần làm bây giờ là gửi đường link cho Crush. Đường link sẽ có dạng tengithub.github.io/tenduan
Ví dụ: tongxuantrung.github.io/heart
camtavietnam.github.io/heart

Vậy là mình đã chia sẽ code và cách đưa lên Website, nếu thắc mắc cứ liên hệ mình, mình hỗ trợ 1:1

theo:Camta

Lời kết

Chúc các bạn thành công và đừng quên để lại bình luận, đánh giá bên dưới nhé!

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Ok, Go it!) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Ok, Go it!