이 글의 내용은 ES6에서 "색상 식별" 미니 게임을 구현하는 방법에 대한 것입니다. 도움이 필요한 친구들에게 참고가 되기를 바랍니다. 당신.
1. 소개
몇 년 전 친구들 사이에서 유행했던 직사각형 찾기 게임이 어렴풋이 기억납니다. 다른 색상으로. 며칠 전, 비슷한 게임을 직접 작성해야겠다는 생각이 갑자기 떠올랐습니다. 이제 데모부터 시작하겠습니다. --프로젝트 소스 코드
이 예제는 ES6 기반으로 구현되었으며 ie9 이상과 호환됩니다.
2. 프로젝트 구조
index.html index.css index.js
이 글에서는 주로 js를 사용하여 함수를 구현하는 방법에 대해 설명합니다. html css는 없습니다. 이 범위. 코드로 직접 이동하세요.
<!--index.html--> nbsp;html> <meta> <meta> <meta> <link> <title>suporka color game</title> <p> </p><p> </p><h1 id="辨色力测试">辨色力测试</h1> <p>找出所有色块里颜色不同的一个</p> <a>开始挑战</a> <header> <h1 id="辨色力测试">辨色力测试</h1> </header> <aside> </aside> <section> </section> <footer> <p> <a> my blog</a></p> ©<a>Suporka</a> ©<a>My book</a> ©<a>My Github</a> </footer> <!-- <script src="index.js"></script> --> <script></script> <script> // 事件兼容方法,兼容ie function addEvent(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } } window.onload = function () { addEvent(document.querySelector('#start'), 'click', function() { document.querySelector('#page-one').style.display = 'none' new ColorGame({ time: 30 }) }) } </script>
/*index.css*/ body { background-color: #FAF8EF; } footer { display: block; margin-top: 10px; text-align: center; } h1 { font-size: 2em; margin: .67em 0; } a { text-decoration: none; } footer a { margin-right: 14px; } .container { margin: auto; padding: 0 10px; max-width: 600px; } .wgt-home { position: fixed; top: 0; left: 0; right: 0; bottom: 0; padding-top: 50px; font-size: 20px; background: #fc0; text-align: center; color: #fff; } .wgt-home p { margin-top: 4em; } .btn { display: inline-block; margin-bottom: 0; font-weight: 400; text-align: center; vertical-align: middle; cursor: auto; background-image: none; border: 1px solid transparent; white-space: nowrap; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; border-radius: 4px; -webkit-user-select: none; user-select: none; } .btn-lg { padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } .btn-primary { color: #fff; background-color: #428bca; border-color: #357ebd; } .wgt-home .btn { margin-top: 4em; width: 50%; max-width: 300px; } .screen { display: block; margin-top: 10px; padding: 1px; } .screen .block { float: left; box-sizing: border-box; padding: 1px; } .screen .block .block-inner { content: ' '; display: block; width: 100%; padding-top: 100%; border-radius: 2px; -webkit-user-select: none; user-select: none; } .result { color: red; text-align: center; font-size: 20px; cursor: pointer; }
// index.js // es6 class class ColorGame { constructor() { } }
3. 함수 구현
게임 개체에는 기본 구성이 있으며, 이는 사용자가 개별적으로 설정할 수도 있으므로——
// index.js class ColorGame { constructor(userOption) { this.option = { time: 30, // 总时长 end: score => { document.getElementById( "screen" ).innerHTML = `<p> </p><p> You score is ${score} <br> click to start again</p> `; addEvent(document.getElementById("restart"), "click", () => { this.init(); }); } // 结束函数 } this.init(userOption); // 初始化,合并用户配置 } }#🎜🎜 # 이 게임에서 설정할 수 있는 것은 총 게임 시간과 종료 메소드 end() 입니다. 위 코드에서 게임이 종료되면 사용자의 점수가 표시되며, 사용자는 클릭하여 게임을 다시 시작할 수 있습니다. addEvent()는 IE와 호환되는 이벤트 청취 방법입니다. :
// 事件兼容方法 function addEvent(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } }init()가 매개변수를 받으면 게임을 초기화합니다. 매개변수가 없으면 게임을 다시 시작하는 기능을 합니다. 따라서 -
// index.js class ColorGame { constructor(userOption) { // ... } init(userOption) { this.step = 0; // 关卡 this.score = 0; // 得分 if (userOption) { if (Object.assign) { // 合并用户配置, es6写法 Object.assign(this.option, userOption); } else { // 兼容es6写法 extend(this.option, userOption, true); } } // 倒计时赋值 this.time = this.option.time; // 设置初始时间和分数 document.getElementsByClassName( "wgt-score" )[0].innerHTML = `得分:<span>${this.score}</span> 时间:<span>${this.time}</span>`; // 开始计时, es6 箭头函数 window.timer = setInterval(() => { if (this.time === 0) { // 如果时间为0,clearInterval并调用结束方法 clearInterval(window.timer); this.option.end(this.score); } else { this.time--; document.getElementById("timer").innerHTML = this.time; } }, 1000); this.nextStep(); // 下一关 } }여기서 확장()은 호환성 병합 구성의 작성 방법이며, 구체적인 코드는 다음과 같습니다.
// 合并参数方法 function extend(o, n, override) { for (var p in n) { if (n.hasOwnProperty(p) && (!o.hasOwnProperty(p) || override)) o[p] = n[p]; } }nextStep() 이것이 호환성 병합 구성의 핵심 방법입니다. 자세한 내용은 아래에서 소개하겠습니다.
// index.js class ColorGame { constructor(userOption) { // ... } init(userOption) { // ... } nextStep() { } }게임의 본체는 n*n 매트릭스 그래픽이며, 각각의 작은 상자는 크기가 같지만 그 중 하나의 색상이 다릅니다.
일반 색상입니다. 각 레벨#🎜🎜 # 도 다르기 때문에 무작위로 색상을 구하고 레벨이 높아질수록 점차 일반 색상에 가까워지는 특수 색상을 반환해야 합니다. 색상은 RGB 3가지 색상으로 구성되어 있으며, 3가지 색상 값이 가까울수록 색상 표현이 더 가까워집니다. 레벨이 올라갈수록 두 색의 삼색값 차이는 한없이 0에 가까워진다. 이때 중학교 때(x축에 무한히 가까운) 역비례함수를 떠올렸다. 이 글에서는
100을 사용한다. /step#🎜 🎜# (스텝이 증가할수록 감소)./** * 根据关卡等级返回相应的一般颜色和特殊颜色 * @param {number} step 关卡级别 */ function getColor(step) { // rgb 随机加减 random let random = Math.floor(100/step); // 获取随机一般颜色,拆分三色值 let color = randomColor(17, 255), m = color.match(/[\da-z]{2}/g); // 转化为 10 进制 for (let i = 0; i 255) { return "ff"; } else if (temp > 16) { return temp.toString(16); } else if (temp > 0) { return "0" + temp.toString(16); } else { return "00"; } } /** * 随机颜色 * @param {number} min 最小值 * @param {number} max 最大值 */ function randomColor(min, max) { var r = randomNum(min, max).toString(16); var g = randomNum(min, max).toString(16); var b = randomNum(min, max).toString(16); return r + g + b; } /** * 随机数 * @param {number} min 最小值 * @param {number} max 最大值 */ function randomNum(min, max) { return Math.floor(Math.random() * (max - min) + min); }기본 메소드에 대해 설명한 후 nextStep() 메소드에 대해 이야기해 보겠습니다. 우선 행렬은 최대 열 수를 가져야 합니다. 너무 작으면 조작이 어려우며 디스플레이가 보기에도 좋지 않습니다. 두 번째로, 각 레벨의 열 수 col을 결정하면 작은 상자의 총 수를 알 수 있습니다.
col, 각 상자의 HTML 조각 문자열을 col 길이로 저장합니다.
col의 배열에서 그 중 하나의 색상을 무작위로 특수 색상으로 수정하고, 이 p에 특수 ID를 부여하고, 이 dom 요소의 클릭 이벤트를 모니터링하면 클릭하면 다음 단계로 들어갑니다.// index.js class ColorGame { constructor(userOption) { // ... } init(userOption) { // ... } nextStep() { // 记级 this.step++; let col; // 列数 // 设置列数,最高不超过16 if (this.step <p></p> `; // 包含所有盒子的数组 let arr = []; // 初始化数组 for (let i = 0; i <p></p> `; // 修改页面 dom 元素 document.getElementById("screen").innerHTML = arr.join(""); // 监听特殊盒子点击事件 addEvent(document.getElementById("special-block"), "click", () => { this.nextStep(); this.score++; // 修改得分 document.getElementById("score").innerHTML = this.score; }); } }이 글을 작성하신 후 index.html을 열어주세요. 기능이 구현되었나요? 이것이 이야기의 끝인가요? 글쎄, 주의 깊게 살펴보면 이 게임이 IE에서 작동하지 않고 IE가 es6 구문과 호환되지 않는다는 것을 알 수 있습니다. 무엇을 해야 할까요? 4. 호환성 및 확장IE와 호환되기 위해서는 es6 구문을 es5로 변환하고 babel을 사용하여 컴파일해야 합니다. 이 js 파일은 script 태그를 통해서만 가져올 수 있는 것으로 나타났습니다. common.js 또는 require.js 모듈 가져오기와 호환되기를 원합니다. --UMD, 여기 UMD와 관련된 js 모듈화에 대한 기사가 있습니다. 필요한 학생들은 살펴볼 수 있습니다. - Javascript 모듈화자세한 내용은 아래에 설명되어 있습니다. 위의 요구 사항을 충족하기 위해 webpack을 사용하려면:
// webpack.js const path = require('path'); module.exports = { entry: { index: './index.js', //入口 }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }, ] }, plugins: [ new VueLoaderPlugin(), ], output: { path: path.resolve(__dirname, './'), library: 'ColorGame', libraryExport: "default", libraryTarget: 'umd', filename: 'colorGame.js', }, };index.js 파일 index.js 파일의 마지막 줄에 내보내기 기본 ColorGame을 추가하고 webpack 명령을 실행하세요. -config ./webpack.js
index.html 생성된 colorGame.js를 소개하면 됩니다
위 내용은 ES6에서 '색상 식별' 미니 게임을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
