Javascript 用鼠标移动随机放置的盒子
我已经创建了一个程序,用随机放置的带有随机颜色的框填充画布。这一部分很简单,我遇到的问题是我想用鼠标移动这些彩色框中的任何一个。此外,指针必须与左上角保持一个共有距离。我的代码如下,任何帮助都将不胜感激Javascript 用鼠标移动随机放置的盒子,javascript,Javascript,我已经创建了一个程序,用随机放置的带有随机颜色的框填充画布。这一部分很简单,我遇到的问题是我想用鼠标移动这些彩色框中的任何一个。此外,指针必须与左上角保持一个共有距离。我的代码如下,任何帮助都将不胜感激 window.onload = init; function init() { var x= Math.floor(Math.random()*400); var y= Math.floor(Math.random()*400); var body = document.getElem
window.onload = init;
function init() {
var x= Math.floor(Math.random()*400);
var y= Math.floor(Math.random()*400);
var body = document.getElementsByTagName("body")[0];
var canvas = document.createElement("canvas");
canvas.height = window.innerHeight;
canvas.width = window.innerWidth;
var context = canvas.getContext("2d");
// Repeat to draw a rectangle 100 times
for(var i=0;i<100;i++){
var color = '#'+ Math.round(0xffffff * Math.random()).toString(16);
context.fillStyle = color;
//Each rectangle is at (0 ~ width of window, 0 ~ height of window)
//Each rectangle's size is 50x50)
context.fillRect(Math.random()*window.innerWidth,
Math.random()*window.innerHeight, 50, 50);
}
document.body.appendChild(canvas);
}
var mousePiece = null;
function init2() {
//we are grabbing the div elm by uts id
// var divEl = document.getElementById("ace");
var cx = document.querySelector("canvas").getContext("2d");
//divEl.style.top = getStyle(divEl,"top");
//divEl.style.left = getStyle(divEl,"left");
addEvent(cx, "mousedown", mouseGrab, false);
}
function mouseGrab(e) {
var evt = e || window.event;
mousePiece = evt.target || evt.srcElement;
addEvent(document, "mousemove", mouseMove, false);
addEvent(document, "mouseup", mouseDrop, false);
}
function mouseMove(e) {
var evt = e || window.event;
var mouseX = evt.clientX;
var mouseY = evt.clientY;
mousePiece.style.left = mouseX + "px";
mousePiece.style.top = mouseY + "px";
}
function mouseDrop(e) {
mousePiece = null;
removeEvent(document, "mousemove", mouseMove, false);
removeEvent(document, "mouseup", mouseDrop, false);
}
function addEvent(object, evName, fnName, cap) {
if (object.attachEvent)
object.attachEvent("on" + evName, fnName);
else if (object.addEventListener)
object.addEventListener(evName, fnName, cap);
}
function removeEvent(object, evName, fnName, cap) {
if (object.detachEvent)
object.detachEvent("on" + evName, fnName);
else if (object.removeEventListener)
object.removeEventListener(evName, fnName, cap);
}
function getStyle(object, styleName) {
if (window.getComputedStyle) {
return document.defaultView.getComputedStyle(object,
null).getPropertyValue(styleName);
} else if (object.currentStyle) {
return object.currentStyle[styleName]
}
}
window.onload=init;
函数init(){
var x=数学地板(数学随机()*400);
变量y=数学地板(数学随机()*400);
var body=document.getElementsByTagName(“body”)[0];
var canvas=document.createElement(“canvas”);
canvas.height=window.innerHeight;
canvas.width=window.innerWidth;
var context=canvas.getContext(“2d”);
//重复100次以绘制矩形
对于(var i=0;i来说,坏消息是画布元素是一个像素映射:当您在画布上绘制一些东西时,您会像更新图像一样修改像素值。在画布上绘制不会创建可以使用事件分配id、抓取或移动的HTML元素。target
(在您的情况下,目标将是画布元素)
好消息是,有一些画布库可以在画布顶部为单独放置的项目创建一个对象模型,然后允许您移动它们。例如,请查看它支持的操作的演示。请随意对您的选项进行更多研究
还要注意随机颜色字符串的两个问题:
使用Math.floor而不是Math.round以避免以值2^24结束(ALFmachine的回复中也已更正)
使用十六进制数字字符串定义CSS颜色需要3或6个以“#”开头的十六进制数字。为避免CSS解析器在您的情况下丢弃颜色值,请根据需要使用“0”填充十六进制数字以组成6个数字
您可以构建一个cssrbg()使用范围为0到255的三个随机整数作为备选值的颜色字符串。坏消息是画布元素是一个像素映射:当您在画布上绘制某些东西时,您会修改像素值,就像您正在更新图像一样。在画布上绘制不会创建可以使用e分配id、抓取或移动的HTML元素target
(在您的示例中,目标将是canvas元素)
好消息是,有一些画布库可以在画布顶部为单独放置的项目创建一个对象模型,然后允许您移动它们。例如,请查看它支持的操作的演示。请随意对您的选项进行更多研究
还要注意随机颜色字符串的两个问题:
使用Math.floor而不是Math.round以避免以值2^24结束(ALFmachine的回复中也已更正)
使用十六进制数字字符串定义CSS颜色需要3或6个以“#”开头的十六进制数字。为避免CSS解析器在您的情况下丢弃颜色值,请根据需要使用“0”填充十六进制数字以组成6个数字
你可以使用0到255范围内的三个随机整数来构造CSS RBG~()颜色字符串。< /P> < P>我会考虑拖动。我用随机颜色和一个颜色给你做了一个。你可以用jQuery UI做很多事情,所以检查文档以找到你需要的东西。
$( document ).ready( function () {
for ( var i = 0; i < 50; i++ ) {
var randomColor = Math.floor(Math.random()*16777215).toString(16);
var ranNum = Math.round( Math.random() * 65 )
$( ".boxHolder" ).append( '<div class="pos' + i + ' draggable ui-widget-content"></div>' )
$( ".pos" + i ).css({
"background" : "#" + randomColor,
"top" : 10 * i + "px",
"left" : ranNum * 6 + "px"
})
}
})
$( function() {
$( ".draggable" ).draggable()
})
$(文档).ready(函数(){
对于(变量i=0;i<50;i++){
var randomColor=Math.floor(Math.random()*16777215).toString(16);
var ranNum=Math.round(Math.random()*65)
$(“.boxHolder”).append(“”)
$(“.pos”+i).css({
“背景”:“#”+随机颜色,
“顶部”:10*i+“px”,
“左”:ranNum*6+“px”
})
}
})
$(函数(){
$(“.draggable”).draggable()
})
我会考虑拖动。我用随机的颜色给你做了一个。所有的事情你可以用jQuery UI来做,所以检查文档来找到你需要的东西。
$( document ).ready( function () {
for ( var i = 0; i < 50; i++ ) {
var randomColor = Math.floor(Math.random()*16777215).toString(16);
var ranNum = Math.round( Math.random() * 65 )
$( ".boxHolder" ).append( '<div class="pos' + i + ' draggable ui-widget-content"></div>' )
$( ".pos" + i ).css({
"background" : "#" + randomColor,
"top" : 10 * i + "px",
"left" : ranNum * 6 + "px"
})
}
})
$( function() {
$( ".draggable" ).draggable()
})
$(文档).ready(函数(){
对于(变量i=0;i<50;i++){
var randomColor=Math.floor(Math.random()*16777215).toString(16);
var ranNum=Math.round(Math.random()*65)
$(“.boxHolder”).append(“”)
$(“.pos”+i).css({
“背景”:“#”+随机颜色,
“顶部”:10*i+“px”,
“左”:ranNum*6+“px”
})
}
})
$(函数(){
$(“.draggable”).draggable()
})
显然,如果不需要探索元素的使用,可以创建HTML元素并拖动它们。这个问题是家庭作业吗?不,我只是觉得如果我可以拖动框会很酷。这是拖动框的方式,但不是在画布中。这是一个很好的答案,有人发布在拖动画布图像上。希望这有帮助。显然,如果你不需要探索元素的使用,你可以创建HTML元素并拖动它们。这个问题是家庭作业吗?不,我只是觉得如果我可以拖动框会很酷。这是拖动它们的方式,但不是在画布中。这是一个很好的答案,有人在拖动画布图像上发布了。希望这能有所帮助。