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制作比较炫酷的页面切换动画的攻略,包括具体步骤和示例说明。 攻略步骤 第一步:设置HTML和CSS基本结构 首先,需要设置HTML和CSS的基本结构。在HTML中,需要至少有两个页面容器,也就是两个div标签来包含每个页面的内容。在CSS中,需要设置页面容器的样式,包括width、height、position、overflow等属性,以及为…

    css 2023年6月10日
    00
  • 多步骤进度条的实现原理及代码

    实现一个多步骤进度条,需要以下步骤: 确定进度条的基本样式和界面 首先需要确定进度条的基本样式,包括进度条的颜色、形状、大小等。其次需要确定进度条在界面的位置和布局,并且需要考虑如何添加多个步骤的进度标识。 示例一: 一个基本的多步骤进度条的HTML结构可以这样编写: <div class="progress"> <di…

    css 2023年6月10日
    00
  • jQuery实现判断滚动条滚动到document底部的方法分析

    首先,我们需要理解什么是滚动条,以及怎样判断滚动条是否已经滚到document底部。其次,我们需要掌握jQuery如何实现这一功能。 判断滚动条是否已经滚到document底部 为了判断滚动条是否滚到了document底部,我们需要获取当前窗口的滚动高度和文档的总高度,然后将它们相加,如果相等或者大于文档总高度,就说明已经滚到了底部。代码如下: var wi…

    css 2023年6月10日
    00
  • CSS让子容器超出父元素(子容器悬浮在父容器效果)

    CSS让子容器超出父元素(子容器悬浮在父容器效果)是一种常见的前端开发技巧,可以实现更丰富的界面效果。下面是实现该效果的完整攻略以及两条示例说明: 方法一:使用绝对定位 通过将父容器设置为相对定位,再将子容器设置为绝对定位,可以让子容器脱离文档流,并能够超出父容器。下面是具体的实现步骤: 在HTML代码中添加一个父容器,子容器以及需要超出父容器的内容; 在C…

    css 2023年6月10日
    00
  • 基于html css实现带搜索图标的搜索框功能

    下面是基于html css实现带搜索图标的搜索框的完整攻略。 步骤1:html代码部分 首先我们需要使用html创建搜索框的代码,代码如下: <div class="search-box"> <input type="text" placeholder="Search"> &…

    css 2023年6月10日
    00
  • jQuery实现切换页面布局使用介绍

    下面就让我详细讲解一下“jQuery实现切换页面布局使用介绍”的完整攻略。 1. 准备工作 在使用jQuery实现切换页面布局之前,我们需要先进行一些准备工作。 首先,需要引入jQuery库。可以在HTML页面的头部中加入以下代码: <script src="https://cdnjs.cloudflare.com/ajax/libs/jqu…

    css 2023年6月11日
    00
  • vue动画之点击按钮往上渐渐显示出来的实例

    下面就是详细讲解“vue动画之点击按钮往上渐渐显示出来的实例”的完整攻略: 1. 理解基本动画原理 在 Vue 中实现动画可以使用 Vue 提供的 transition 组件。Vue 的过渡效果依赖于 CSS3 过渡和动画,我们可以通过添加一些 CSS3 的类来定义动画效果,例如 fade-enter、fade-enter-active、fade-leave…

    css 2023年6月10日
    00
  • CSS导航栏及弹窗示例代码

    针对“CSS导航栏及弹窗示例代码”的完整攻略,以下是详细的讲解。 CSS导航栏的制作 HTML代码结构 首先需要创建一个HTML文档,并在其中设置导航栏需要的HTML结构。一般来说,导航栏分为三大部分:左侧LOGO/品牌名称、中间菜单导航、右侧用户信息或其他附加项。此处我采用典型的bootstrap导航栏HTML结构,示例如下: <nav class=…

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