前端通过range制作的rgba配色小工具

简介: 制作一个针对视觉的产品,快速调出想要的颜色,然后写在给前端程序员的文档里,方便前端程序员进行页面的配色处理[滑稽]

初衷

制作一个针对视觉的产品,快速调出想要的颜色,然后写在给前端程序员的文档里,方便前端程序员进行页面的配色处理[滑稽]

什么是range

在html中有一个<input>的标签,通过在input中的type属性来控制输入框的类型。
其中有一个type="range"的range类型,可以实现滑动取值的效果。

效果图

image.png

range的值

一个小实验

实现了一个range的滚动条之后,我们先做个小实验,通过js获取一下他的value,看看是什么呢?

<!DOCTYPE html>
<html>
    <head>
        <title>range演示</title>
        <meta charset="utf-8">
    </head>
    <body>
        <input type="range" id="range">
    </body>
    <script>
        let range = document.getElementById('range');
        let flag = false;
        range.addEventListener('mousedown',()=>{
            range.addEventListener('mouseup',()=>{
                console.log(document.getElementById('range').value);
            })
        })
    </script>
</html>

上面代码我首先设置了在html代码中写了一个range的滑动条,并为他赋予了一个id---range。
然后在JavaScript中首先通过document.getElementById获取这个id,然后为他绑定了一个鼠标按下的事件,当鼠标按下后,抬起的的时候会触发绑定的第二个事件,同时在控制台中打印出value。
如图

image.png

那么读者可能会说,为什么不能只绑定一个mousedown的事件,然后鼠标按下再获取range的值呢?
答案是:
mousedown是鼠标按下的时候就会触发,想象一下,假如此时range的小圆球在中部的位置,如果用户把他拖拽到80的位置,那么拖动之后,当用户鼠标按下的第一时间,50的值就会获取到,而用户真正期待的值,80是在下一次拖动的时候才能获取到,但是如果用户下一次要拖动,那么极大几率他并不想获取80的值了,也就是说,我们期望是用户鼠标摁下时开始检测,但只有鼠标抬起时,range条的位置才是我们最终要关注的值,所以我这边是采取了外层绑定一个mousedown事件触发的条件,在内部又绑定了一个mouseup的事件触发条件。

控制range的value的范围

value的范围,默认的是0-100,但是因为我们要制作的rgba()函数的参数是0-255,所以我们可以通过在<input type="range" id="range">中设置min和max的值来控制其value的范围
方案如下:

<input type="range" id="range" min="0" max="255">

分别为rgba的四个参数进行绑定

let range1 = document.getElementById('range1');
        let range2 = document.getElementById('range2');
        let range3 = document.getElementById('range3');
        let range4 = document.getElementById('range4');
        range1.addEventListener('mousedown',()=>{
            range1.addEventListener('mouseup',()=>{
                console.log(range1.value);
            })
        })
        range2.addEventListener('mousemove',()=>{
            range2.addEventListener('mouseup',()=>{
                console.log(range2.value);
            })
        })
        range3.addEventListener('mousedown',()=>{
            range3.addEventListener('mouseup',()=>{
                console.log(range3.value);
            })
        })
        range4.addEventListener('mousedown',()=>{
            range4.addEventListener('mouseup',()=>{
                console.log(range4.value);
            })
        })

分别为四个range条进行绑定,通过移动range来改变值

改变div区域颜色的JavaScript函数

function change(){
            let divColor = document.getElementById('div');
            divColor.style.backgroundColor = `rgba(${range1.value},${range2.value},${range3.value},${range4.value / 100})`
        }

首先获取div区域的id,然后通过divColor.style.backgroundColor改变背景色,实现滑动改变颜色的效果。

初版本全部代码

<!DOCTYPE html>
<html>
    <head>
        <title>range演示</title>
        <meta charset="utf-8">
        <style>
            .div{
                position: absolute;
                width: 800px;
                height: 600px;
                top: 50%;
                left: 50%;
                transform: translate(-50%,-50%);
            }
            [type="range"]{
                margin-right: 200px;
            }
        </style>
    </head>
    <body>
        red:<input type="range" id="range1" min="0" max="255">
        green:<input type="range" id="range2" min="0" max="255">
        blue:<input type="range" id="range3" min="0" max="255">
        alpha:<input type="range" id="range4" min="0" max="100">
        <div class="div" id="div"></div>
    </body>
    <script>
        function change(){
            let divColor = document.getElementById('div');
            divColor.style.backgroundColor = `rgba(${range1.value},${range2.value},${range3.value},${range4.value / 100})`
        }
        let range1 = document.getElementById('range1');
        let range2 = document.getElementById('range2');
        let range3 = document.getElementById('range3');
        let range4 = document.getElementById('range4');
        range1.addEventListener('mousedown',()=>{
            range1.addEventListener('mouseup',()=>{
                console.log(range1.value);
                change();
            })
        })
        range2.addEventListener('mousemove',()=>{
            range2.addEventListener('mouseup',()=>{
                console.log(range2.value);
                change();
            })
        })
        range3.addEventListener('mousedown',()=>{
            range3.addEventListener('mouseup',()=>{
                console.log(range3.value);
                change();
            })
        })
        range4.addEventListener('mousedown',()=>{
            range4.addEventListener('mouseup',()=>{
                console.log(range4.value);
                change();
            })
        })
    </script>
</html>

不足和优化----最终解决的版本

我们上面虽然完成了通过滚动条改变颜色的效果,但是我们发现,上述我们完成的demo有一些缺陷,即:只有滑动之后,鼠标松开,才能看到渲染的效果,中途的改变无法发现,不能很好的很直观的进行观察。
为了解决这个问题,我采取了通过mousemove来替换mousedown嵌套mouseup的方法。addEventListener()内调用change()函数。完成动态渲染改变页面颜色。
最终解决版本如下:

<!DOCTYPE html>
<html>
    <head>
        <title>range演示</title>
        <meta charset="utf-8">
        <style>
            .div{
                position: absolute;
                width: 800px;
                height: 600px;
                top: 50%;
                left: 50%;
                transform: translate(-50%,-50%);
            }
            [type="range"]{
                margin-right: 200px;
            }
        </style>
    </head>
    <body>
        red:<input type="range" id="range1" min="0" max="255">
        green:<input type="range" id="range2" min="0" max="255">
        blue:<input type="range" id="range3" min="0" max="255">
        alpha:<input type="range" id="range4" min="0" max="100">
        <div class="div" id="div"></div>
    </body>
    <script>
        function change(){
            let divColor = document.getElementById('div');
            divColor.style.backgroundColor = `rgba(${range1.value},${range2.value},${range3.value},${range4.value / 100})`
        }
        let range1 = document.getElementById('range1');
        let range2 = document.getElementById('range2');
        let range3 = document.getElementById('range3');
        let range4 = document.getElementById('range4');
        range1.addEventListener('mousemove',()=>{
            change();
        })
        range2.addEventListener('mousemove',()=>{
            change();
        })
        range3.addEventListener('mousemove',()=>{
            change();
        })
        range4.addEventListener('mousemove',()=>{
            change();
        })
    </script>
</html>

最后完成。

相关文章
|
3月前
|
缓存 移动开发 Rust
前端构建工具 Mako 开源了
Hi,我是 sorrycc,Mako 的主要负责人之一,也是 Umi、Dva、Father 等库的作者。 很开心,Mako 终于开源了! Github 地址:https://github.com/umijs/mako/ 今天和大家正式介绍下他。
157 3
|
2月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具
|
7天前
|
前端开发 JavaScript 开发者
前端项目代码规范工具 (ESLint. Prettier. Stylelint. TypeScript)
前端项目代码规范工具 (ESLint. Prettier. Stylelint. TypeScript)
|
1月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
51 8
|
1月前
|
监控 前端开发 JavaScript
前端稳定性工具-Sentry
【11月更文挑战第9天】Sentry 是一个开源的错误和性能监控平台,支持多种编程语言和框架。它能够捕获前端应用中的各种错误和性能问题,提供详细的错误信息和用户行为关联,帮助开发团队快速定位和解决问题,优化应用性能。但需注意隐私保护、数据准确性和成本控制。
|
1月前
|
前端开发 JavaScript API
前端开发的秘密武器:这些工具让你轻松应对各种复杂动画效果!
【10月更文挑战第30天】前端开发中,动画效果为页面增添了无限生机。CSS3的@keyframes规则和JavaScript动画库如GSAP、Anime.js等,使开发者能轻松实现从简单到复杂的动画效果。掌握动画原理和设计原则,结合工具和库,可以创造出既美观又实用的动画,提升用户体验。
58 4
|
1月前
|
Web App开发 前端开发 JavaScript
前端开发的秘密武器:这些工具让你轻松应对各种复杂布局!
【10月更文挑战第31天】前端开发充满挑战,尤其是在处理复杂布局时。本文介绍了几种关键工具和技术,如HTML和CSS基础、Firefox开发者工具、Visual Studio Code以及Vue、React和Angular等前端框架,帮助开发者高效应对复杂布局,提升代码质量和用户体验。
36 2
|
2月前
|
自然语言处理 前端开发 JavaScript
推荐 10 个前端开发会用到的工具网站
本文介绍了多个前端开发工具,包括 Web Design Museum、Landing Page、Google Fonts、Lorem Ipsum、Animista、Blobmaker、Spline、CodeToGo、UnusedCSS 和 Responsively,帮助开发者提高效率和项目质量。这些工具涵盖了设计、动画、代码片段管理、响应式测试等多个方面。
157 0
推荐 10 个前端开发会用到的工具网站
|
2月前
|
Web App开发 前端开发 开发工具
2024前端开发工具推荐
本文推荐了2024年最受前端开发者欢迎的十款工具,包括Visual Studio Code、Dreamweaver、Sublime Text、WebStorm、Atom、HBuilder、Chrome Developer Tools、Figma、Postman和Git。这些工具覆盖了代码编辑、调试、版本控制及API开发等多个方面,旨在帮助开发者提高效率和代码质量,让开发工作更高效、更愉快。
|
2月前
|
存储 前端开发 JavaScript
前端模块化打包工具的深度解析
【10月更文挑战第13天】前端模块化打包工具的深度解析