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学习之一 CSS样式的引入

    关于CSS样式的引入有以下几种方法: 内部样式表 内部样式表是指将CSS样式直接写在HTML文档中,使用style标签将CSS样式放在head标签中。 示例代码: <!DOCTYPE html> <html> <head> <title>示例文档</title> <style> body…

    css 2023年6月9日
    00
  • 禁止选中文字兼容IE、Chrome、FF等

    要禁止选中文字,可以使用CSS属性user-select。这个属性可以设置为none或text,分别表示禁止或允许选中文字。但要注意,这个属性在不同浏览器中的兼容性不一样。 方法一:使用伪元素(:before或:after) 使用伪元素可以禁止选中指定元素内的文字。在原元素上加上position: relative,然后使用:before或:after来选择…

    css 2023年6月10日
    00
  • jquery实现简单的遮罩层

    下面是详细讲解 jQuery 实现简单遮罩层的攻略: 1. 理解遮罩层 遮罩层是一种在网页上遮盖其他元素,覆盖整个页面或特殊的区域,使得用户只能在遮罩层上操作,以达到防止误操作或提示用户等作用。 2. 实现方法 2.1 创建遮罩层的 HTML 结构 首先,我们需要在 HTML 中创建遮罩层的标签,并设定其样式。常用的遮罩层标签是 div 标签。 <di…

    css 2023年6月10日
    00
  • CSS外边距合并代码

    当相邻的两个块级元素具有外边距时,CSS会自动将外边距合并到一个距离,称为外边距合并,合并后的距离为两个元素中的最大外边距。外边距合并是CSS的一个特性,可以对页面布局和排版产生一定的影响,因此需要在编写CSS样式时进行注意和处理。 以下是处理外边距合并的一些方式: 1.通过在两个块级元素之间插入一个空的内联元素来防止外边距合并: <div class…

    css 2023年6月9日
    00
  • 利用js编写响应式侧边栏

    下面是利用JS编写响应式侧边栏的完整攻略: 1. 前言 响应式设计的出现,使得我们可以为不同的屏幕尺寸和设备类型提供不同的布局和用户体验。而一个好的响应式设计在移动设备上需要具备友好的菜单导航,侧边栏便是其中一种常见的解决方案。通过JS编写响应式侧边栏可以实现菜单栏的自适应和开关功能,并能提高用户的交互体验。 2. 整体思路 编写HTML结构 利用CSS设置…

    css 2023年6月10日
    00
  • php短址转换实现方法

    下面是“PHP短址转换实现方法”的完整攻略。 什么是短链接? 短链接指的是将一个较长的链接转换成一个较短的链接,通常用于美化、缩短URL地址,方便使用。 短链接实现方法 短链接的实现方法有多种,其中比较常用的是通过URL重定向和哈希算法实现。 1. URL重定向 URL重定向是指将一个URL请求重定向到另一个URL地址。通过URL重定向可以让一个较长的URL…

    css 2023年6月10日
    00
  • 发一个css比较清爽的写法

    要写出比较清爽的 CSS 代码,我们需要遵循以下几个原则: 避免冗余,尽量减少代码的重复。 统一使用缩写属性,如 margin 和 padding 可以使用 margin: 10px 20px 30px 40px; 的方式代替。 注意 CSS 选择器的权重,尽量避免使用过于具体的选择器,以便提高代码的可重用性。 保持结构清晰,让代码易于维护。 下面是两个例子…

    css 2023年6月10日
    00
  • 设置margin和padding为0可去掉DIV与DIV的空白

    在网页设计中,我们经常需要去掉 div 元素之间的空白,以使页面布局更加紧凑。下面是一个完整攻略,包含了如何使用 CSS 设置 margin 和 padding 为 0 可去掉 div 元素之间的空白的过程和两个示例说明。 CSS 如何设置 margin 和 padding 为 0 可去掉 div 元素之间的空白 我们可以使用 CSS 的 margin 和 …

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