JS实现的RGB网页颜色在线取色器完整实例

下面是“JS实现的RGB网页颜色在线取色器完整实例”的详细攻略。

1. 实现思路

此取色器实现的主要流程如下:

  1. 生成一个颜色面板
  2. 当用户点击面板中的某个颜色区域,该区域的颜色会被选中
  3. 预览区域实时展示当前选中的颜色
  4. 点击确认按钮将选中的颜色返回

2. HTML 结构

首先在 HTML 文件中定义以下结构:

<div class="color-panel">
  <div class="color-item"></div>
  <!-- 包含 16 个 color-item -->
</div>
<div class="color-picker">
  <div class="preview"></div>
  <div class="controls">
    <input type="range" min="0" max="255" step="1" class="range-r">
    <input type="range" min="0" max="255" step="1" class="range-g">
    <input type="range" min="0" max="255" step="1" class="range-b">
    <input type="number" min="0" max="255" class="input-r">
    <input type="number" min="0" max="255" class="input-g">
    <input type="number" min="0" max="255" class="input-b">
  </div>
  <button class="confirm">确认</button>
</div>

其中 color-panel 为颜色面板,包含了16个 color-item 元素,每个元素的背景色代表了对应的颜色。

color-picker 为取色器页面,包含了展示和调节颜色的区域,预览区域为 preview,颜色调节区域为 controls,其中使用了 rangenumber 输入框来调节颜色。

confirm 为确认按钮,用于返回选中的颜色。

3. CSS 样式

为了美化样式,我们需要覆盖默认样式。在 CSS 文件中,我们可以使用以下样式:

.color-panel {
  display: inline-block;
  border: 1px solid #ccc;
  padding: 5px;
}

.color-item {
  display: inline-block;
  width: 20px;
  height: 20px;
  margin-right: 5px;
  cursor: pointer;
}

.color-picker {
  position: fixed;
  top: 30%;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  background: #fff;
  border: 1px solid #ccc;
  padding: 10px;
}

.preview {
  width: 100px;
  height: 100px;
  margin-bottom: 10px;
  background: #000;
}

.controls {
  display: flex;
  flex-wrap: wrap;
}

input[type="range"] {
  width: 100%;
  vertical-align: middle;
}

input[type="number"] {
  width: 30%;
  margin-left: 5px;
  vertical-align: middle;
}

.confirm {
  margin-top: 10px;
  padding: 5px 10px;
  border: none;
  background: #3993d0;
  color: #fff;
  cursor: pointer;
}

4. JS 实现

const $ = (selector) => document.querySelector(selector);
const $$ = (selector) => document.querySelectorAll(selector);

// rgb 颜色转 hex 颜色
function rgbToHex(r, g, b) {
  let hex = ((r << 16) | (g << 8) | b).toString(16);
  return "#" + new Array(Math.abs(hex.length - 7)).join("0") + hex;
}

// 初始化值
let selectedColor = "#ff0000"; // 默认为紅色
let isControlledByInput = false;

// 颜色调节函数
function setColor(color) {
  selectedColor = color;
  $(".preview").style.backgroundColor = color;

  // 将 RGB 值分离
  let r = parseInt(color.slice(1, 3), 16);
  let g = parseInt(color.slice(3, 5), 16);
  let b = parseInt(color.slice(5, 7), 16);

  // 设置 range 和 input 的值
  if (!isControlledByInput) {
    $(".range-r").value = r;
    $(".range-g").value = g;
    $(".range-b").value = b;

    $(".input-r").value = r;
    $(".input-g").value = g;
    $(".input-b").value = b;
  }

  // 将 RGB 颜色转为 HEX 颜色并返回
  return rgbToHex(r, g, b);
}

// 绑定事件
// 点击颜色区块,设置选中颜色
$$(".color-item").forEach((item) => {
  item.addEventListener("click", () => {
    let color = window.getComputedStyle(item).getPropertyValue("background-color");
    setColor(color);
  });
});

// 拖动 range,设置颜色
$$(".range-r, .range-g, .range-b").forEach((range) => {
  range.addEventListener("input", function() {
    isControlledByInput = false;
    setColor(`rgb(${$(".range-r").value}, ${$(".range-g").value}, ${$(".range-b").value})`);
  });
});

// 输入数值,设置颜色
$$(".input-r, .input-g, .input-b").forEach((input) => {
  input.addEventListener("input", function() {
    isControlledByInput = true;
    setColor(`rgb(${$(".input-r").value}, ${$(".input-g").value}, ${$(".input-b").value})`);
  });
});

// 点击确认按钮返回颜色
$(".confirm").addEventListener("click", () => {
  console.log(selectedColor); // 这里可以改为其他操作来实现颜色选取器的交互
});

总结

通过以上实现,我们成功地开发了一个颜色选取器,用户可以通过点击颜色区块、调节颜色数值、拖动 range 来选取喜欢的颜色,并返回 RGB 颜色值。

示例说明:

  1. 点击 color-item 区块:如果用户点击颜色区块,通过事件绑定,获取该区块的颜色作为当前选中颜色。
  2. 调节颜色数值:用户也可以通过调节颜色数值实时改变颜色,通过事件绑定,实现数值调节颜色的效果。

希望这份攻略能够对你造福,如有问题,欢迎进一步交流探讨!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现的RGB网页颜色在线取色器完整实例 - Python技术站

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

相关文章

  • CSS的SASS样式编程指南

    以下是CSS的SASS样式编程指南的完整攻略: 什么是SASS SASS(Syntactically Awesome Style Sheets)是一种基于CSS语言的CSS预处理器。通过SASS预处理器,我们可以使用一些像编程语言一样的特性(如变量、函数、嵌套、继承等),来创建更加可维护和精简的CSS代码。 如何使用SASS 使用SASS有两种方式:命令行工…

    css 2023年6月9日
    00
  • css实现隐藏滚动条并可以滚动内容的实例代码

    下面是“CSS实现隐藏滚动条并可以滚动内容”的攻略。 一、背景和实现思路 在一些场景中,需要隐藏滚动条并且允许用户通过鼠标滚轮或者手势滑动方式来滚动页面内容,这时可以使用CSS来实现。具体思路是使用CSS样式来隐藏默认的滚动条,同时为元素添加自定义的滚动条来实现滚动页面内容。 二、实现步骤 隐藏默认的滚动条 通过设置元素的overflow属性,可以隐藏默认的…

    css 2023年6月10日
    00
  • flex4.5中CSS选择器的应用小结

    关于“flex4.5中CSS选择器的应用小结”这个主题,下面是我的详细讲解攻略: 一、选择器的基本概念 CSS选择器是一种用来选择页面中某些元素的表达式。选择器可以根据元素的标签名、类名、ID等属性进行选择,更改元素的样式。 常见的CSS选择器有以下几种: 标签选择器:通过元素标签名来选择元素。 类选择器:通过元素的class属性值来选择元素。 ID选择器:…

    css 2023年6月9日
    00
  • JS控制弹出悬浮窗口(一览画面)的实例代码

    这里给您详细讲解一下 JS 控制弹出悬浮窗口的实例代码的攻略。下面是具体步骤: 1. 给HTML添加悬浮窗口基本元素 首先,在 HTML 文档中添加弹出悬浮窗口的基本元素,包括触发弹出的按钮和整个弹出窗口的框架结构。代码示例如下: <button id="open-popup">点击打开弹出窗口</button> …

    css 2023年6月10日
    00
  • 纯CSS3实现飘逸洒脱带有飞行效果的三级下拉菜单

    下面是详细讲解“纯CSS3实现飘逸洒脱带有飞行效果的三级下拉菜单”的完整攻略。 简介 下拉菜单是网站中非常常见的一种菜单样式,三级下拉菜单相比于一二级下拉菜单,具有层次更加分明、展示内容更全面的特点。本文将详细讲解如何使用CSS3实现飘逸洒脱带有飞行效果的三级下拉菜单。 初探 要实现三级下拉菜单,需要用到HTML和CSS两种语言来编写代码。首先,我们需要在H…

    css 2023年6月10日
    00
  • overflow:hidden line-height clearfix:after使用方法介绍

    接下来我将详细讲解“overflow:hidden line-height clearfix:after使用方法介绍”的完整攻略。 overflow:hidden的用法 我们在制作网页时,通常会使用包含内容的框,如div、section等。在框的内部放入元素时,如果这些元素的宽高超过了框的范围,就会出现溢出。通常,我们可以使用 overflow:hidden…

    css 2023年6月10日
    00
  • css美化input file按钮的代码方法

    下面是详细讲解“css美化input file按钮的代码方法”的完整攻略。 简介 <input type=”file”> 元素在HTML中用于上传文件,长相不甚美观。但是,我们可以通过CSS来美化它。 步骤 隐藏原来的文件上传按钮 创建一个用来代替原来的按钮的新元素 将新元素与原来的文件上传按钮进行关联 下面是示例代码: 例1:自定义上传按钮背景…

    css 2023年6月10日
    00
  • CSS几步实现赛博朋克2077风格视觉效果

    下面是详细讲解“CSS几步实现赛博朋克2077风格视觉效果”的完整攻略: 一、准备工作 在实现赛博朋克2077风格的视觉效果之前,我们需要做一些准备工作: 在HTML文档中引入CSS文件。 html <link rel=”stylesheet” href=”style.css”> 添加一些示例内容,便于我们观察效果。 html <div c…

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