javascript - 如何连续创建多个史莱克图像?

标签 javascript html css web

所以,我有一个页面,当用户按住鼠标左键时,会在他/她的光标所在的位置绘制史莱克图像。问题是,当鼠标按下时只创建一张图片,但我需要 ENDLESS CURRENT OF SHREKS。

代码如下:

var shrekId = 0;

document.onmousemove = function(event) {
  mouseX = event.clientX;
  mouseY = event.clientY;
}

window.addEventListener('selectstart', function(e){ e.preventDefault(); });

document.body.onmousedown = function(event) {
  shrekId = 0;
  interval = setInterval(draw(event), 100);
}

document.body.onmouseup = function() {
  clearInterval(interval);
}

function draw(event) {
  this["img" + shrekId] = document.createElement("img");
  this["img" + shrekId].src = "http://pngimg.com/uploads/shrek/shrek_PNG3.png";
  this["img" + shrekId].style = "height: 100px; width: 100px; position: absolute; left: " + (mouseX - 50) + "px; top: " + (mouseY - 50) + "px; x-index: 100;";
  this["img" + shrekId].ondragstart = function() { return false; };
  document.body.appendChild(this["img" + shrekId]);
  shrekId += 1
}

最佳答案

setInterval() 将函数作为参数,这是通过传递函数名称(不带括号)来完成的,如下所示:

myFunc()
{
    console.log('hello');
    return 1;
}
setInterval(myFunc, 100);

当您包含括号时(就像您在示例中所做的那样),它将运行该函数,获取该函数的返回值,并将其提供给 setInterval。 例如:

myFunc()
{
    console.log('hello');
    return 1;
}
setInterval(myFunc(), 100);

变成

setInterval(1, 100);

因为 myFunc() 返回 1。

所以你应该能够通过从你的间隔中删除括号来修复你的代码:

interval = setInterval(draw(event), 100);
// to
interval = setInterval(draw, 100);

这也意味着您必须从函数中删除参数:

function draw(event) {
// to
function draw() {

关于javascript - 如何连续创建多个史莱克图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497299/

相关文章:

javascript - HTML 分页问题

javascript - 前端开发 Mithril.js

javascript - 复制事件中的 event.clipboardData.setData

javascript - 如何在 CoffeeScript 中导入 javascript 库?

javascript - 在 BigVideo.js 加载之前,小播放器出现在左上角

javascript - 如何在 Bootstrap Navbar 中激活所有按钮

当内容从其他单元格更改时,表格布局中表格单元格中的 HTML 内容具有不同的填充和边距

html - 为什么段落出现在关闭列表的左侧?

css - Sass 两层嵌套

php - PHP DOM 有两个 HTML 问题:1.) DOMDocument::createEntityReference $name 值和 2.) 如何向一个元素添加多个 CSS 类?