原生JS生成九宫格

yizhihongxing

生成九宫格的主要流程可以分为以下三步:

  1. 根据九宫格的行列数计算出总格子数和每行格子数;
  2. 循环生成格子,并设置其属性和样式;
  3. 将所有生成的格子添加到页面中。

下面是一个实现九宫格的JavaScript代码示例:

// 获取容器元素
var container = document.getElementById('container');
// 定义九宫格的行列数
var num = 3;
// 计算每行格子数和总格子数
var size = container.clientWidth / num;
var total = num * num;

// 循环生成格子
for (var i = 0; i < total; i++) {
  // 创建格子元素
  var cell = document.createElement('div');
  // 设置样式和属性
  cell.style.width = size + 'px';
  cell.style.height = size + 'px';
  cell.style.float = 'left';
  cell.style.border = '1px solid #ccc';
  cell.style.boxSizing = 'border-box';
  cell.setAttribute('data-index', i);
  // 将格子添加到容器中
  container.appendChild(cell);
}

在上面的代码中,我们使用document.createElement方法来创建格子元素,并使用cell.setAttribute方法来设置其data-index属性。container.appendChild方法则将创建的格子添加到容器中。

下面是一个更为完整的九宫格实现代码示例,除了基本功能外,还实现了随机色块、点击变色和计分的功能。

// 获取容器元素
var container = document.getElementById('container');
// 定义九宫格的行列数
var num = 3;
// 计算每行格子数和总格子数
var size = container.clientWidth / num;
var total = num * num;
// 定义计分器和随机选中的格子
var score = 0;
var selected;

// 循环生成格子
for (var i = 0; i < total; i++) {
  // 创建格子元素
  var cell = document.createElement('div');
  // 设置样式和属性
  cell.style.width = size + 'px';
  cell.style.height = size + 'px';
  cell.style.float = 'left';
  cell.style.border = '1px solid #ccc';
  cell.style.boxSizing = 'border-box';
  cell.style.backgroundColor = getRandomColor();
  cell.setAttribute('data-index', i);
  // 绑定点击事件
  cell.onclick = function(event) {
    // 判断是否点击了已选中的格子
    if (this == selected) {
      // 随机选中下一个格子
      selected = container.children[Math.floor(Math.random() * total)];
      // 计分,并更新计分器和格子颜色
      score++;
      updateScore();
      updateColor();
    }
  };
  // 将格子添加到容器中
  container.appendChild(cell);
}

// 随机选中一个格子
selected = container.children[Math.floor(Math.random() * total)];

// 更新计分器内容
function updateScore() {
  var scoreElement = document.getElementById('score');
  scoreElement.innerHTML = 'Score: ' + score;
}

// 更新随机选中的格子的背景色
function updateColor() {
  // 随机生成颜色,除了已选中的格子
  var color = getRandomColor();
  while (color == selected.style.backgroundColor) {
    color = getRandomColor();
  }
  // 更新选中的格子和其它格子的背景色
  selected.style.backgroundColor = color;
  for (var i = 0; i < total; i++) {
    var cell = container.children[i];
    if (cell != selected) {
      cell.style.backgroundColor = getRandomColor();
    }
  }
}

// 获取随机颜色
function getRandomColor() {
  var colors = ['red', 'blue', 'green', 'yellow', 'orange', 'purple'];
  return colors[Math.floor(Math.random() * colors.length)];
}

// 初始化计分器
updateScore();

在上面的代码中,我们定义了一个selected变量,来表示随机选中的格子。在点击事件处理函数中,我们判断当前点击的格子是否是已选中的格子,如果是,则随机选中下一个格子,并更新计分器内容和格子颜色。updateColor()函数用于更新随机选中的格子和其它格子的背景色,避免它们和已选中的格子的颜色重复。getRandomColor()函数用于获取一个随机的颜色值,它从一个颜色数组colors中随机选择一个颜色。updateScore()函数用于更新计分器的内容。最后我们调用updateScore()函数来初始化计分器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS生成九宫格 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js动态生成唯一id的三种方法

    那么我们就来讲解一下JS动态生成唯一ID的三种方法。 1. 使用Math.random() 使用Math.random()方法可以生成一个随机数,因为它返回0到1之间的伪随机数,所以我们可以将其与当前的时间戳相乘,生成一个不太可能重复的唯一ID。 function generateUniqueID() { let uniqueID = Math.floor(…

    JavaScript 2023年6月10日
    00
  • js各种验证文本框输入格式(正则表达式)

    下面是详细讲解“js各种验证文本框输入格式(正则表达式)”的完整攻略。 一、什么是正则表达式 正则表达式是一种描述字符模式的方法,可以用来匹配、搜索、替换字符串等。在JavaScript中,可以使用内置对象RegExp来创建正则表达式。 正则表达式的基本语法如下: /pattern/modifiers; 其中,pattern是要匹配的模式,modifiers…

    JavaScript 2023年6月10日
    00
  • javascript中全局对象的isNaN()方法使用介绍

    当使用JavaScript时,我们可能需要检查某个值是否是”非数字”(NaN)。 在JavaScript中,有一个名为”isNaN()”的全局对象方法可以用于检查值是否为NaN。 1. isNaN()方法的语法 isNaN()方法将要被检查的值作为参数,其语法如下: isNaN(value) 其中,value表示需要检查是否为NaN的值。 2. 返回值 如果…

    JavaScript 2023年5月27日
    00
  • 微信小程序返回上一页的各种方法实例

    微信小程序返回上一页的各种方法实例 在微信小程序中,返回上一页是开发过程中经常会涉及到的一个需求。本文将详细讲解微信小程序中返回上一页的各种方法,并提供两个示例说明。 方法一:调用微信提供的API 微信小程序提供了一个 wx.navigateBack() 方法用于返回上一页,该方法可接受一个参数,表示返回的层数,默认值为1,即返回上一页。 示例代码如下: w…

    JavaScript 2023年6月11日
    00
  • 详解如何在vue项目中使用eslint+prettier格式化代码

    以下是在Vue项目中使用ESLint和Prettier的完整攻略: 安装和配置ESLint 安装ESLint 在终端中进入项目文件夹,并运行以下命令安装ESLint: npm i eslint –save-dev 创建ESLint配置文件 继续在项目文件夹中运行以下命令,创建名为.eslintrc.js的ESLint配置文件: npx eslint –i…

    JavaScript 2023年6月10日
    00
  • js截取字符串的两种方法及区别详解

    当我们需要在JavaScript中处理字符串时,常常需要对字符串进行截取。本篇攻略将会详细讲解js截取字符串的两种方法及其区别。 一、JavaScript中substring()方法 let str = "hello world"; let strNew = str.substring(3); console.log(strNew); 上…

    JavaScript 2023年5月28日
    00
  • ScrollDown的基本操作示例

    关于”ScrollDown的基本操作示例”的完整攻略,可以按照以下步骤进行: 1. 打开ScrollDown 在浏览器中输入ScrollDown的地址,即可进入。 2. 查看菜单栏 在网页的菜单栏中,有多个选项,包括: Home Features Examples Documentation Support 3. 查看示例及其操作 在菜单栏中选择”Examp…

    JavaScript 2023年6月10日
    00
  • 自己写一个uniapp全局弹窗(APP端)

    下面是详细讲解如何自己写一个uniapp全局弹窗(APP端)的完整攻略。 1. 准备工作 在开始之前,需要先确定以下几点: 确定弹窗的样式和内容,包括弹窗的尺寸、背景色、字体等; 确定弹窗的触发方式,比如是否需要点击按钮或者触发特定事件; 确定弹窗的位置,比如是否需要固定在屏幕底部或者居中展现。 2. 实现步骤 实现全局弹窗的基本步骤如下: 在 App.vu…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部