520 简单表白代码(JS)

本文分享了一款专为520设计的表白网页,利用HTML、CSS和JavaScript实现动态文字输入、背景音乐播放及烟花粒子动画等功能。作者通过简单的代码示例展示了如何创建这样一个浪漫的网页。

这两天不知道咋了,迷迷糊糊的,突然知道今天是520的我,急急忙忙赶出个程序(新手,代码有点乱),发出来大家一起研究下(参考百度的)。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>520</title>

        <style>
        html, body{padding:0px; margin:0px; background:#222; font-family: 'Karla', sans-serif; color:#FFF; height:100%; overflow:hidden;}

        canvas {width:100%; height:100%;}
        
        #text,#text_520{font-family:'楷体'; color:rgb(255,255,3); font-size:20px; position:fixed; left:10%; top:10%;}
        
        #text_520{font-size:100px; top:50%; left:50%;}
        
        img{position:fixed; top:0; left:0; width:100%;}
        
        #last{font-size:12px; bottom:10px; left:50%; position:fixed;}
        /*
        @keyframes drop {
           0% { 
              transform: translateY(-100px);
              opacity: 0;
           }
           90% {
              opacity: 1;
              transform:translateY(10px);
           }
           100% {
              transform:translateY(0px;)
           }
        }
        */
        </style>
    </head>
    <body>

        <canvas id="c"></canvas>
        
        <div id="text"></div>
        
        <div id="text_520">5 2 0</div>
        
        <img src="./timg.jpg" class="img" />
        
        <div id="last">版权所有:李晓珂</div>
        
        <script type="text/javascript" src="./jquery-1.11.0.min.js"></script>
        <script type="text/javascript">
            function isIE(){
                var u = navigator.userAgent;
                if((u.indexOf("compatible") > -1 && u.indexOf("MSIE") > -1) || (u.indexOf("Trident") > -1 && u.indexOf("rv:11.0") > -1)){
                    alert("该浏览器暂不支持,请更换浏览器");
                    window.open('','_self'); 
                    window.close();
                }
                var audio = document.createElement("audio");
                    audio.setAttribute("src","./520-love.mp3");
                    audio.setAttribute("autoplay","autoplay");
            }
            isIE();
        </script>
        <script type="text/javascript">
        
                var textArr = [
                    'I love three things in this world,',
                    'the sun ,the moon and you.',
                    'The sun for the day,',
                    'the moon for the night,',
                    'and you forever!',
                    '',
                    'If you were a teardrop,',
                    'in my eye,',
                    'for fear of losing you,',
                    'I would never cry.',
                    'And if the golden sun,',
                    'should cease to shine its light,',
                    'just one smile from you,',
                    'would make my whole world bright.'
                ];
                
                var text_520 = document.getElementById('text_520');
                var height = (window.innerHeight - text_520.offsetHeight) / 2;
                var width = (window.innerWidth - text_520.offsetWidth) / 2;
                
                text_520.style.top = height + 'px';
                text_520.style.left = width + 'px';
                $('#text_520').hide();
                $('.img').hide();
                
                
                var m = 0;
                var n = 0;
                var text = document.getElementById('text');
                function typing(){
                    if(m <= textArr[n].length) {
                        text.innerHTML = text.innerHTML.substring(0,text.innerHTML.length-1) + textArr[n].substr(m++,1) + '_';
                        setTimeout(typing,250);
                    }else {
                        if(n < textArr.length-1){
                            text.innerHTML = text.innerHTML.substring(0,text.innerHTML.length-1) + "<br />_";
                            n++;
                            m = 0;
                            typing();
                        }else {
                            text.innerHTML = text.innerHTML.substring(0,text.innerHTML.length-1);
                            $('#text').fadeOut(5000);
                            setTimeout(function(){$('#text_520').fadeIn(5000);},7000);
                            setTimeout(function(){$('#text_520').fadeOut(5000); },7000);
                            setTimeout(function(){$('.img').fadeIn(50000);},15000)
                        }
                    }
                }
                setTimeout(typing,5000);
            
            var ctx = document.querySelector('canvas').getContext('2d');
                ctx.canvas.width = window.innerWidth;
                ctx.canvas.height = window.innerHeight;

            var sparks = [];
            var fireworks = [];
            
            var walker;
            
            fireworks.pop();
            
            var i = 10;
            while(i--) fireworks.push(new Firework(Math.random()*window.innerWidth, window.innerHeight*Math.random()));
            
            // setInterval(render, 1000/50);
            render();
            function render() {
                
                setTimeout(render, 1000/50);
                
                ctx.fillStyle = 'rgba(0, 0, 0, 0.2)';
                ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
                
                // 上升效果
                for(var firework of fireworks) {
                    if(firework.dead) continue;
                    firework.move();
                    firework.draw();
                }
                // 绽放效果
                for(var spark of sparks) {
                    if(spark.dead) continue;
                    spark.move();
                    spark.draw();
                    
                }
                
                if(Math.random() < 0.1) fireworks.push(new Firework());
                
                //ctx.height = ctx.height;
            }

            function Spark(x, y, color) {
               this.x = x;
               this.y = y;
               this.dir = Math.random() * (Math.PI*2);
               this.dead = false;
               this.color = color;
               this.speed = Math.random() * 3 + 3;
               walker = new Walker({ radius: 20, speed: 0.25 });
               this.gravity = 0.25;
               this.dur = this.speed / 0.15;
               this.move = function() {
                  this.dur--;
                  if(this.dur < 0) this.dead = true;
                  
                  if(this.speed < 0) return;
                  if(this.speed > 0) this.speed -= 0.15;
                  walk = walker.step();
                  this.x += Math.cos(this.dir + walk) * this.speed;
                  this.y += Math.sin(this.dir + walk) * this.speed;
                  this.y += this.gravity;
                  this.gravity += 0.05;
                  
               }
               this.draw = function() {
                  drawCircle(this.x, this.y, 2, this.color);
               }
               
            }
            
            function Firework(x, y) {
               this.xmove = Math.random()*2 - 1;
               this.x = x || Math.random() * ctx.canvas.width;
               this.y = y || ctx.canvas.height;
               this.height = Math.random()*ctx.canvas.height/2;
               this.dead = false;
               this.color = randomColor();
               
               this.move = function() {
                  this.x += this.xmove;
                  if(this.y > this.height) this.y -= 4; 
                  else this.burst();
                  
               }
               
               this.draw = function() {
                  drawCircle(this.x, this.y, 3, this.color)
               }
               
               this.burst = function() {
                  this.dead = true
                  i = 100; while(i--) sparks.push(new Spark(this.x, this.y, this.color));
                  sparks.pop();
               }
               
            }
            
            setTimeout(function (){window.open('','_self').close();},175000);
            
/*

            // 清除两个数组
            function clear(){
                if(sparks!=null || fireworks!=null){
                    sparks.pop();
                    fireworks.pop();
                }
                var sparks = [];
                var fireworks = [];
            }
           
            setInterval(clear,100);
             */
            function drawCircle(x, y, radius, color) {
               color = color || '#FFF';
               ctx.fillStyle = color;
               ctx.fillRect(x-radius/2, y-radius/2, radius, radius);
            }

            function randomColor(){
               return ['#6ae5ab','#88e3b2','#36b89b','#7bd7ec','#66cbe1'][Math.floor(Math.random() * 5)];
            }

            function Walker(options){
               this.step = function(){
                  this.direction = Math.sign(this.target) * this.speed
                  this.value += this.direction
                  this.target
                     ? this.target -= this.direction
                     : (this.value)
                        ? (this.wander) 
                           ? this.target = this.newTarget() 
                           : this.target = -this.value
                        : this.target = this.newTarget()  
                  return this.direction
               }
                  
               this.newTarget = function() {
                  return Math.round(Math.random()*(this.radius*2)-this.radius)
               }
               
               this.start = 0
               this.value = 0
               this.radius = options.radius
               this.target = this.newTarget()
               this.direction = Math.sign(this.target)
               this.wander = options.wander
               this.speed = options.speed || 1
            }
        </script>

    </body>
</html>

 

转载于:https://www.cnblogs.com/Super-Lee/p/9064206.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值