效果图如上:

HTML和js代码如下:

<style>
        *{
            padding: 0;
            margin:0;
            list-style: none;
        }
        .colorPicker{
            width: 255px;
            width: 765px;
            margin:50px auto;
        }
        .colorBar{
            height: 30px;
            width: 255px;
            width: 765px;
            position: relative;
        }
        .red{
            width: 255px;
            height: 30px;
            position: absolute;
            top: 0;
            left: 0;
            background:linear-gradient(to right,rgb(255,0,0),rgb(196,129,129));
        }
        .black{
            width: 255px;
            height: 30px;
            position: absolute;
            top: 0;
            left: 255px;
            background:linear-gradient(to right,rgb(0,0,0),rgb(204,204,204));
        }
        .green{
            width: 255px;
            height: 30px;
            position: absolute;
            top: 0;
            left: 510px;
            background:linear-gradient(to right,rgb(0,255,0),rgb(181,243,181));
        }
        .colorSlider{
            /* width: 12px; */
            height: 54px;
            position: absolute;
            left: 50%;
             margin-left: -6px;  
            top: -12px;
            z-index: 20;
            /*background-color: green;*/
        }
        .sliderTop{
            width: 0;
            height: 0;
            position: absolute;
            left: 0;
            top: 0;
            border-left:6px solid transparent;
            border-top:12px solid red;
            border-bottom:6px solid transparent;
            border-right:6px solid transparent;
        }
        .sliderBottom{
            width: 0;
            height: 0;
            position: absolute;
            left: 0;
            bottom: 0;
            border-left:6px solid transparent;
            border-top:6px solid transparent;
            border-bottom:12px solid red;
            border-right:6px solid transparent;
        }
        .colorShow{
            width: 253px;
            height: 100px;
            margin:20px auto 0 auto;
            border: 1px solid #000;
        }
        .showRGB{ text-align: center; display: block; }
        .flag{
            width: 1px;
            height: 80px;
            position: absolute;
            left: 50%;
            top: -22px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="colorPicker">
        <div class="colorBar">
            <div class="red"></div>
            <div class="black"></div>
            <div class="green"></div>
            <div class="colorSlider">                
                <div class="sliderTop"></div>
                <div class="sliderBottom"></div>
            </div>
           
        </div>
        <div class="colorShow"></div>
        <div class="showRGB"></div>
    </div>
    <script>
        function ColorPicker(parameter){
            this.colorPicker = parameter.colorPicker;
            this.colorShow = parameter.colorShow;
            this.showRGB = parameter.showRGB;
            this.colorSlider = parameter.colorSlider;
            this.colorArr = parameter.colorArr;
            this.cell = this.colorPicker.offsetWidth / this.colorArr.length;
        }
        ColorPicker.prototype = {
            init:function(){
                this.getRGB();
                return this;
            },
            move:function(){
                var that = this;
                this.colorSlider.onmousedown = function(e){
                    var startX = e.pageX - this.offsetLeft;
                    var startY = e.pageY - this.offsetTop;
                    document.onmousemove = function(e){
                        var endX = e.pageX - startX;
                        var endY = e.pageY -startY;
                        if(endX<=0){
                            endX = 0
                        }else if(endX>=this.colorPicker.offsetWidth){
                            endX = this.colorPicker.offsetWidth;
                        }
                        
                        this.colorSlider.style.left = endX +"px";
                        let xx = this.colorSlider.offsetLeft + 6;
                        this.getRGB(xx);
                    }.bind(that)
                };
                this.colorSlider.onmouseup = document.onmouseup = function(){
                    document.onmousemove =null;
                };
            },
            getRGB:function(x){
                var X = x||this.colorSlider.offsetLeft,
                    index = (X/this.cell|0)>=this.colorArr.length ? this.colorArr.length -1 : (X/this.cell|0),
                    s = this.colorArr[index];
                var rc = s[0]-s[3],
                    gc = s[1]-s[4],
                    bc = s[2]-s[5];
                var r=s[0],g=s[1],b=s[2];
                rc>0 ? r-=parseInt((Math.abs(rc)/this.cell)*(X%this.cell)) : r+=parseInt((Math.abs(rc)/this.cell)*(X%this.cell));
                gc>0 ? g-=parseInt((Math.abs(gc)/this.cell)*(X%this.cell)) : g+=parseInt((Math.abs(gc)/this.cell)*(X%this.cell));
                bc>0 ? b-=parseInt((Math.abs(bc)/this.cell)*(X%this.cell)) : b+=parseInt((Math.abs(bc)/this.cell)*(X%this.cell));
                x?this.colorShow.style.backgroundColor = `rgb(${r},${g},${b})`:this.colorShow.style.backgroundColor = `rgb(${r+6},${g+6},${b+6})`;
                //this.showRGB.innerHTML=`${r}|${g}|${b}|${x%this.cell}`;
            }
        }
        new ColorPicker({
            colorPicker:document.querySelector('.colorBar'),
            colorShow:document.querySelector('.colorShow'),
            showRGB:document.querySelector('.showRGB'),
            colorSlider:document.querySelector(".colorSlider"),
            colorArr:[
                [255,0,0,196,129,129],
                [0,0,0,204,204,204],
                [0,255,0,181,243,181]
            ]
        }).init().move();
        
    </script>

一个简单的原生js取色效果相关推荐

  1. Vue.js如何写一个简单的原生js模块,浏览器中的表现如何?

    2019独角兽企业重金招聘Python工程师标准>>> 浏览器正在逐步的支持原生JavaScript模块.Safari和Chrome的最新版本已经支持它们了,Firefox和Edge ...

  2. 基于JavaScript+css写一个简单的h5动态下雨效果

    基于JavaScript+css写一个简单的h5动态下雨效果 文章目录 什么是前端 展示效果 JavaScript是什么? 步骤 1.html 2.css 3.js 什么是前端 前端它是一个工作,它的 ...

  3. js动画与html动画效果,九种原生js动画效果

    在做页面中,多数情况下都会遇到页面上做动画效果,我们大部分做动画的时候都是使用框架来做(比如jquery),这里我介绍下如何让通过原生的js来实现像框架一样的动画效果! 1.匀速动画效果说明:匀速动画 ...

  4. 写一个简单的node.js项目

    项目初始化: npm init -y express是基于node.js的web的http模块封装的更强大的框架 npm i express@4.17.1 跨域: npm i cors@2.8.5 数 ...

  5. 史上最简单的原生JS实现轮播图效果

    原生JS实现轮播图效果 上篇文章我们说到了怎样利用原生JS实现Tab切换的效果,现在我们来说一下Tab切换的"升级版".如何利用原生JS实现轮播图效果.如图: HTML代码: &l ...

  6. 如何写一个简单的node.js C 扩展

    node 是由 c 编写的,核心的 node 模块也都是由 c 代码来实现,所以同样 node 也开放了让使用者编写 c 扩展来实现一些操作的窗口. 如果大家对于 require 函数的描述还有印象的 ...

  7. 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务

    原文链接:https://github.com/nixzhu/dev-blog/blob/master/2014-04-21-write-a-simple-nodejs-mongodb-web-ser ...

  8. 再来一个小游戏——原生js逐句解释开发简易版别踩白块,附源码

    芜湖!没想到上个做扫雷的阅读量这么高(激动) 先捞一下:做个小项目~纯原生JS手把手逐句解释写一个扫雷小游戏(附源码) 快看↑ 这次就做一个别踩白块吧哈哈哈哈哈 最终版演示地址:钢琴块 源码在最后!最 ...

  9. 一个简单的百度换肤效果

    一个简单的换肤效果 html和css部分 JavaScript部分 html和css部分 <style>* {margin: 0;padding: 0;}body {background: ...

最新文章

  1. Luogu P3177 [HAOI2015] 树上染色(树上背包)
  2. jmeter全链路压测
  3. 删除vue打包大小限制_压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)...
  4. 过滤被7整除或者包含7的数子
  5. 开发机多用户 xdebug 远程调试 PhpStorm
  6. 8086地址传送指令LEA
  7. Git Proxy开关
  8. 【java】CGLIB动态代理原理分析
  9. Android RabbitMQ使用之RabbitMQ安装及配置
  10. 新浪微博下拉菜单制作(DOM小练习)
  11. dotnet Multi-platform App UI 多平台应用 UI 框架简介
  12. 050 XSS通关小游戏——xss challenge
  13. 《STM32学习笔记》4——核心功能电路与编程(下)
  14. 微信小程序之解决background-image属性失效
  15. 灰色GM(1,1)模型及其在电力负荷预测中的应用附Matlab代码
  16. 松江辟出长三角G60科创走廊供给侧结构性改革新路
  17. AFL学习笔记(下)
  18. 百度回应“偷拍插件”:凤巢系统并非面向普通用户
  19. 如何快速高效的投放互联网广告?
  20. Win10_VS2013_CPU_Darknet编译踩坑

热门文章

  1. 文献解读|地表水和地下水中抗生素耐药性的连锁和驱动机制:它们对土地利用和季节变化的响应
  2. Oracle报错:listener does not currently know of service requested in connect descriptor
  3. 【趋势分析方法一】MATLAB实现Mann-Kendall趋势/突变检验
  4. PMO-项目管理办公室(PMBOK第六版)
  5. 中关村软件园机房和天坛机房的对比
  6. 金属制造业的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  7. html中只居中偏右怎么设置,写字如何把握重心?高级的重心不是居中居正,而是偏右偏上...
  8. 再快一点?动态内容如何加速
  9. win7无法连接打印机拒绝访问_win7系统无法连接共享打印机的解决方法
  10. 什么是 Deno,它与 Node.js 有何不同?