html颜色编辑器,HTML5 渐变色彩编辑器

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

function setInputColor(input) {

input.style.backgroundImage = "linear-gradient(to right, transparent 80%, " + input.value + " 80%)";

renderGradient();

}

var colorInputs = document.querySelectorAll("input[type=text]");

[].slice.apply(colorInputs).forEach(function(input) {

input.addEventListener("keyup", function(e) {

setInputColor(input);

});

});

var svg = document.querySelector("svg");

document.querySelector("#show-line").addEventListener("click", function(e) {

svg.classList.toggle("hidden");

});

var line = document.querySelector("#line");

var angleLabel = document.querySelector("#angle-label");

var message = document.querySelector(".help-message");

var startX = 100,

startY = 100,

currentX = window.innerWidth - 100,

currentY = window.innerHeight - 100;

function renderGradient() {

line.setAttribute("x1", startX);

line.setAttribute("y1", startY);

line.setAttribute("x2", currentX);

line.setAttribute("y2", currentY);

angleLabel.setAttribute("x", startX + 5);

angleLabel.setAttribute("y", startY - 5);

// Computing the angle with an hypothetical vertical line that starts from x1 y1.

var deltaY = currentY - startY;

var deltaX = currentX - startX;

var angle = 90 + (Math.atan2(deltaY, deltaX) * 180 / Math.PI);

angleLabel.textContent = angle.toPrecision(4) + " deg";

angleLabel.style.transformOrigin = startX + "px " + startY + "px";

angleLabel.style.transform = "rotate(" + (angle - 90) + "deg)";

// Computing the edge point location and the distance from it in %.

var slope = (startY - currentY) / (startX - currentX);

var edgeY = slope * (-startX) + startY;

if (angle >= 180 || edgeY < 0) {

edgeY = 0;

} else if (edgeY > window.innerHeight) {

edgeY = window.innerHeight;

}

var edgeX = startX + (-startY) / slope;

if (angle <= 90 || edgeX < 0) {

edgeX = 0;

} else if (edgeX > window.innerWidth) {

edgeX = window.innerWidth;

}

var edge2Y = startY + slope * (window.innerWidth - startX);

if (edge2Y < 0) {

edge2Y = 0;

} else if (angle >= 180 || edge2Y > window.innerHeight) {

edge2Y = window.innerHeight;

}

var edge2X = startX + (window.innerHeight - startY) / slope;

if (angle <= 90 || edge2X > window.innerWidth) {

edge2X = window.innerWidth;

} else if (edge2X < 0) {

edge2X = 0;

}

var distanceFromEdge = Math.sqrt(Math.pow(startX - edgeX, 2) + Math.pow(startY - edgeY, 2));

var distanceFromEdge2 = Math.sqrt(Math.pow(edge2X - startX, 2) + Math.pow(edge2Y - startY, 2));

var distanceLine = Math.sqrt(Math.pow(currentX - startX, 2) + Math.pow(currentY - startY, 2));

var startPos = 100 * distanceFromEdge / (distanceFromEdge + distanceFromEdge2);

var endPos = 100 * (distanceFromEdge + distanceLine) / (distanceFromEdge + distanceFromEdge2);

document.body.style.backgroundImage = "linear-gradient(" +

angle + "deg," +

colorInputs[0].value + " " + startPos + "%," +

colorInputs[1].value + " " + endPos + "%)";

}

addEventListener("mousedown", function(e) {

if (e.target.tagName.toLowerCase() === "input") {

return;

}

message.style.display = "none";

startX = e.clientX;

startY = e.clientY;

function onMove(e) {

currentX = e.clientX;

currentY = e.clientY;

renderGradient();

}

function onUp(e) {

removeEventListener("mousemove", onMove);

removeEventListener("mouseup", onUp);

}

addEventListener("mousemove", onMove);

addEventListener("mouseup", onUp);

});

setInputColor(colorInputs[0]);

setInputColor(colorInputs[1]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个画图编辑器,需要掌握以下几个方面的知识: 1. Java 的图形界面编程:Java 提供了许多图形界面编程的工具包,如 AWT、Swing 和 JavaFX。其中,Swing 是最常用的一个,它提供了一系列组件和容器,可以用于构建用户界面。 2. 图形绘制:Java 的 Graphics 类提供了许多绘图方法,可以用于在组件上绘制各种图形,如直线、矩形、圆形、椭圆等。此外,还可以使用 Graphics2D 类进行更高级的绘图操作,如绘制渐变、阴影等。 3. 鼠标事件处理:画图编辑器需要支持鼠标操作,如点击、拖拽、释放等事件,需要使用 Java 提供的 MouseListener 和 MouseMotionListener 接口来处理这些事件。 4. 文件读写:画图编辑器需要支持将绘制的图形保存到文件中,以及从文件中加载已有的图形。Java 提供了许多文件读写的类和接口,如 File、FileReader、FileWriter 等。 下面是一个简单的画图编辑器实现步骤: 1. 创建一个 JFrame 窗口,并添加一个 JPanel 组件用于绘制图形。 2. 在 JPanel 组件上重写 paintComponent 方法,使用 Graphics 类提供的方法绘制图形。 3. 使用 MouseListener 和 MouseMotionListener 接口处理鼠标事件,根据事件类型调用不同的绘图方法。 4. 添加菜单栏和工具栏,并在菜单栏和工具栏上添加绘图工具,如画笔、直线、矩形、圆形等。 5. 实现保存和加载功能,将绘制的图形保存到文件中,以及从文件中加载已有的图形。 注意事项: 1. 在绘制图形时,需要注意 Graphics 类的一些特性,如颜色、线条粗细、填充模式等。 2. 在处理鼠标事件时,需要注意鼠标坐标与组件坐标的转换,以及鼠标操作的顺序和逻辑。 3. 在实现保存和加载功能时,需要注意文件格式的选择和读写方法的正确使用。 以上是一个简单的画图编辑器实现步骤和注意事项,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值