发布于 2026-01-06 0 阅读
0

使用原生 JavaScript 的超棒迷你图像编辑器

使用原生 JavaScript 的超棒迷你图像编辑器

欢迎来到 JavaScript30 挑战的第三天,今天我们将使用纯 HTML、CSS 和 JavaScript 构建这个令人惊叹的迷你图像编辑器。

如果您想了解更多关于 JavaScript30 的信息,请观看下方视频并点击此处。

想知道我们项目最终效果如何?点击这里

起始文件

在继续之前,请从下面的代码片段中复制初始的 HTML 和 CSS 文件,并设置好本地环境以开始操作。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Scoped CSS Variables and JS</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <h2>Update CSS Variables with <span class='hl'>JS</span></h2>

  <div class="controls">
    <label for="spacing">Spacing:</label>
    <input id="spacing" type="range" name="spacing" min="10" max="200" value="10" data-sizing="px">

    <label for="blur">Blur:</label>
    <input id="blur" type="range" name="blur" min="0" max="25" value="10" data-sizing="px">

    <label for="base">Base Color</label>
    <input id="base" type="color" name="base" value="#ffc600">
  </div>

  <img src="https://source.unsplash.com/7bwQXzbF6KE/800x500">
  <script src="script.js"></script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode
:root {
    --base: #ffc600;
    --spacing: 10px;
    --blur: 10px;
}

img {
    padding: var(--spacing);
    background-color: var(--base);
    filter: blur(var(--blur));
}

.hl {
    color: var(--base);
}

/*
    misc styles, nothing to do with CSS variables
*/

body {
    text-align: center;
    background: #193549;
    color: white;
    font-family: 'helvetica neue', sans-serif;
    font-weight: 100;
    font-size: 50px;
}

.controls {
  margin-bottom: 50px;
}

input {
  width: 100px;
}
Enter fullscreen mode Exit fullscreen mode

本地代码配置完成后,您的 HTML 文件将如下所示👇迷你编辑器截图
我们的迷你编辑器截图

项目本身没问题,但是间距、模糊和颜色效果无法实现,因为我们需要用 JavaScript 来实现这些效果。但在学习 JavaScript 之前,我们先来了解一下 CSS 变量。

CSS变量

这个项目的主要目的是教我们CSS变量,

那么,让我们来学习一下什么是 CSS 变量,以及我们将如何在项目中使用它。我们将以上面代码中的示例为例——

:root {
    --base: #ffc600;
    --spacing: 10px;
    --blur: 10px;
}

img {
    padding: var(--spacing);
    background-color: var(--base);
    filter: blur(var(--blur));
}

.hl {
    color: var(--base);
}
Enter fullscreen mode Exit fullscreen mode

解释

  • CSS变量可以具有全局作用域或局部作用域,全局变量可以在整个文档中使用,而局部变量只能在特定文档中使用。
  • 要声明全局变量,必须使用 :root{} 选择器,然后可以使用 `--` 开头的任何有效 CSS 值来声明自定义属性。
  • 现在,你可以借助 var() 函数将此变量与任何属性一起使用,例如,在上面的代码中,我们声明了一个 -spacing 变量,并使用 var(--spacing) 将其与 img 的 padding 属性一起重用。

JavaScript 逻辑

  • 为了使我们的输入能够正常工作,我们首先将输入存储在一个变量中。
  • 创建一个函数来处理输入更新。
  • 添加事件监听器以调用此函数。
const inputs = document.querySelectorAll('.controls input')

function handleUpdate() {
    const suffix = this.dataset.sizing || '' //blank value is for color as they don't hold px value
    document.documentElement.style.setProperty(`--${this.name}`, this.value + suffix) 
}

inputs.forEach(input => input.addEventListener('change', handleUpdate)) 
inputs.forEach(input => input.addEventListener('mousemove', handleUpdate)) 
Enter fullscreen mode Exit fullscreen mode

解释

  • 我们编写了一个名为 handleUpdate() 的函数,以使输入功能正常运行。
  • 后缀变量存储字符串“px”或空字符串,用于表示要添加到输入值后的颜色值。
  • document.getElement 用于访问 HTML 文档的元素,我们使用它来更改元素的间距、模糊和颜色值,以便自动影响整个文档。
  • 最后,我们为颜色添加了“change”事件监听器,为间距和模糊添加了“mousemove”事件监听器,使其能够动态工作。

结论

恭喜,你已经完成了这一步,你的编辑器现在应该可以正常工作了。

如果您对此项目有任何疑问或困惑,请在下方留言。

我们下篇文章再见,下次见!

祝您编程愉快!

文章来源:https://dev.to/ashutoshmishra/amazing-mini-image-editor-with-vanilla-javascript-day-3-of-javascript30-48fh