代码如下,复制即可使用:

安装webpack

接下来安装webpack的一些依赖。

yarn add -D webpack webpack-dev-server webpack-cli

安装完毕以后,在package.json配置一下启动命令。

...
"scripts": {
  "start": "webpack-dev-server --config ./webpack.config.js --mode development",
  ...
},
...

–mode
用来配置模式,可以区别是构建还是开发模式,如果是构建发布,就把一些开发时的提示等插件去掉。
–config 指向webpack的配置文件,默认为同目录下的 webpack.config.js

 

 使用html+css+js实现弹球游戏

安装

在最初的阶段,可以使用在线编辑的网站来学习React基本的语法。
从 Hello World
开始,可以在Codepen,或者codesandbox上进行编写。
当然,也可以使用npm或者yarn来安装依赖,本地进行开发。
这里先讲解通过create-react-app来创建一个React项目,后面会详细讲解如何用webpack创建一个react项目。

 

<!doctype html>
<head>
    <style type="text/css">
        .panel{
            position: relative;
            z-index: 0;
            top:0px;
            left: 400px;
            width: 300px;
            height: 500px;
        }
        .console{
            position: absolute;
            z-index: 1;
            top:0;
            left:0;
            width:100%;
            height: 40px;
            background-color: #bbb;
        }
        .message{
            position: absolute;
            z-index: 1;
            top:40px;
            left:0;
            width:100%;
            height: 460px;
            color: white;
            font-size: 50px;
            text-align: center;
            line-height: 460px;
            background-color: #999;
        }
        .start,.score,.pause{
            position: absolute;
            z-index: 2;
            top: 0;
            width: 100px;
            height: 100%;
            font-size: large;
            color: white;
            text-align: center;
            line-height: 40px;
            background: -webkit-linear-gradient(top,#4ca8ff,yellow);
        }
        .start{
            left: 0px;
        }
        .score{
            left:100px;
            background-color: red;
        }
        .pause{
            left:200px;
        }
        .start:after,.pause:before{
            content: "";
            position: absolute;
            z-index: 2;
            top: 0;
            width: 3px;
            height: 100%;
            background: -webkit-linear-gradient(top,#666,#999);
        }
        .start:after{
            left: 97px;
        }
        .pause:before{
            left: 0px;
        }
        .start:hover,.pause:hover{
            cursor: pointer;
            background: -webkit-linear-gradient(top,#4ca8ff,red);
        }
        .panel span{
            position: absolute;
            z-index: 0;
            top:50%;
            left: 50%;
            font-size: 50px;
            color: blue;
        }
        .ball,.secondBall{
            position:absolute;
            z-index: 2;
            border-radius:50%;
            width: 20px;
            height: 20px;
        }
        .ball{
            top: 460px;
            left:140px;
            background-color: red;
        }
        .secondBall{
            top: 40px;
            left:140px;
            background-color: red;
        }
        .plate{
            position: absolute;
            top:480px;
            left: 100px;
            z-index: 2;
            width: 100px;
            height: 20px;
            background-color: #e5e5e5;
        }
        .promte{
            margin-top: 20px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="panel" class="panel">
        <div class="console">
            <div id="start" class="start">开始</div>
            <div id="score" class="score">0</div>
            <div id="pause" class="pause">暂停</div>
        </div>
        <div id="message" class="message"></div>
        <div id="ball" class="ball"></div>
        <div id="plate" class="plate"></div>
    </div>
    <div class="promte">提示:键盘左右箭头控制滑板</div>
    <script     type="text/javascript">
        (function(){
            document.onkeydown = function(e){
                var e = e || window.event;
                if(e.keyCode == 37){
                    //键盘向左键
                    plateMove("left");
                }else if(e.keyCode == 39){
                    //键盘向右键
                    plateMove("right");
                }
            }
        })();
        var panel = document.getElementById("panel"),
            message = document.getElementById("message"),
            plate = document.getElementById("plate"),
            ball = document.getElementById("ball"),
            start = document.getElementById("start"),
            score = document.getElementById("score"),
            pause = document.getElementById("pause"),
            secondBall;
        var startGame, x = x2 = -1, y = y2 = -1, speed = 1, positionArr = [], pauseActive = false,
            //一个标志:表示难度是否还能增加
            flag = true,
            //球的起始位置
            ballX, ballY, secondBallX, secondBallY,
            //边界
            minX = 0,
            maxX = panel.offsetWidth - ball.offsetWidth,
            minY = 40;
            maxY = panel.offsetHeight - ball.offsetHeight - plate.offsetHeight;
        window.onload = function(){
            if(window.addEventListener){
                start.addEventListener("click",startClick,false);
                pause.addEventListener("click",pauseClick,false);
            }else if(window.attachEvent){
                start.attachEvent("onclik",startClick);
                pause.attachEvent("onclik",pauseClick);
            }else{
                start.onclik = startClick;
                pause.onclik = pauseClick;
            }
        }

        function plateMove(direction){
            if(direction == "left"){
                if(plate.offsetLeft > 0){
                    plate.style.left = (plate.offsetLeft-30 < 0? 0 : plate.offsetLeft-30)+"px";
                }
            }
            if(direction == "right"){
                if(plate.offsetLeft < 200){
                    plate.style.left = (plate.offsetLeft+30 > 200? 200 : plate.offsetLeft+30)+"px";
                }
            }
        }
        function startClick(){
            if(!pauseActive){
                resetGame();
            }else{
                pauseActive = !pauseActive;
            }
            startGame = setInterval(function(){
                //console.log(ballX+"======"+ballY);
                positionArr = setPosition(ballX,ballY,true);
                if(positionArr == "GAMEOVER"){
                    return;
                }
                ballX = positionArr[0];
                ballY = positionArr[1];
                //设置球的位置
                ball.style.left = ballX+"px";
                ball.style.top = ballY+"px";
                if(!flag){
                    positionArr = setPosition(secondBallX,secondBallY,false);
                    secondBallX = positionArr[0];
                    secondBallY = positionArr[1];
                    secondBall.style.left = secondBallX+"px";
                    secondBall.style.top = secondBallY+"px";
                }else{
                    addDifficulty();
                }
            },30);
        }
        function pauseClick(){
            pauseActive = true;
            clearInterval(startGame);
        }

        function resetGame(){
            clearInterval(startGame);
            message.innerHTML="";
            score.innerHTML="0";
            ball.style.left = "140px";
            ball.style.top = "460px";
            plate.style.left = "100px";
            plate.style.top = "480px";
            ballX = ball.offsetLeft;
            ballY = ball.offsetTop;
            speed = 1;
            flag = true;
            //第二个球设置隐藏
            if(secondBall){
                secondBall.style.display="none";
                secondBall.style.left = "140px";
                secondBall.style.top = "40px";
            }
        }

        function addDifficulty(){
            if(parseInt(score.innerHTML) > 500 && parseInt(score.innerHTML) < 2000){
                speed = 1.2;
            }else if(parseInt(score.innerHTML) > 2000 && parseInt(score.innerHTML) < 5000){
                speed = 1.5;
            }else if(parseInt(score.innerHTML) > 5000){
                if(typeof secondBall != "undefined"){
                    secondBall.style.display="";
                }else{
                    secondBall = document.createElement('div');
                }

                secondBall.className = 'secondBall';
                panel.appendChild(secondBall);
                secondBallX = secondBall.offsetLeft;
                secondBallY = secondBall.offsetTop;
                flag = false;
            }
        }
        function setPosition(_x,_y,firstball){
            if(_x == minX || _x == maxX){
                //x*=-1;
                firstball? x*=-1 : x2*=-1;
            }
            if(_y == minY || _y == maxY){
                //y*=-1;
                firstball? y*=-1 : y2*=-1;
            }
            if(_y == maxY){
                //判断挡板的位置是不是在球的范围内
                if(plate.offsetLeft > _x || (plate.offsetLeft + plate.offsetWidth) < _x){
                    clearInterval(startGame);
                    message.innerHTML="GAMEOVER";
                    return "GAMEOVER";
                }
            }
            if(firstball){
                _x+=4*x*speed;
                _y+=5*y*speed;
            }else{
                _x+=4*x2*speed;
                _y+=5*y2*speed;
            }

            //边界处理
            _x = _x < minX? minX : _x;
            _x = _x > maxX? maxX : _x;

            _y = _y < minY? minY : _y;
            _y = _y > maxY? maxY : _y;
            //设置分数
            score.innerHTML=parseInt(score.innerHTML)+10*speed;
            return [_x,_y];
        }
    </script>
</body>
</html>

Node和Npm

首先安装Node.js,这个直接在Node官网下载安装包即可。建议下载长期支持版,bug会较少。
安装完毕后,在终端或者cmd里输入

npm -v

如果要使用npx,确保npm的版本大于5.2。如果npm版本较低,使用

npm i -g npm

更新npm到最新版,就可以使用npx了。有关npx的详细信息,可以查看这篇文章。
如果使用yarn,也可以自行去yarn官网下载安装。

1.

 如果您有更好的方法或更多的功能,可以和我们大家一起分享哦,如有错误,欢迎联系我改正,非常感谢!!!

webpack

现在前端开发常用的构建工具是webpack。接下来介绍用webpack构建一个简单的react-app。

发表评论

电子邮件地址不会被公开。 必填项已用*标注