我对JavaScript还是很陌生,我所要做的就是单击一个按钮,它将使图像出现在随机位置。
我尝试过的事情:
function show_image(src, width, height, alt) {
var img = document.createElement("img");
img.src = src;
img.width = width;
img.height = height;
img.alt = alt;
document.body.appendChild("imglink");
}
但这甚至没有构成新元素。
有人可以告诉我正确的密码吗?
答案 0 :(得分:1)
您在appendChild中有一个小错误,您应该改为附加创建的元素。除此之外,只需将顶部和左侧设置为随机值,即可开始使用
function show_image(src, width, height, alt) {
var img = document.createElement("img");
img.src = src;
img.width = width;
img.height = height;
img.alt = alt;
// set the position
img.style.position = 'absolute';
img.style.top = document.body.clientHeight * Math.random() + 'px';
img.style.left = document.body.clientWidth * Math.random() + 'px';
document.body.appendChild(img);
}
document.getElementById('foo').addEventListener('click', () =>
show_image("http://placekitten.com/200/300", 200, 300, 'foo')
);
html,
body {
height: 100vh;
width: 100vh;
}
<button id="foo">
Get a cat
</button>
答案 1 :(得分:1)
您已有的代码有问题。 appendChild
方法使用HTMLElement
,而不是String
。
但是,要在click
上执行功能,您必须向要单击的元素添加一个事件侦听器。创建/添加事件侦听器的方法称为addEventListener
。它使用事件的名称作为字符串(在这种情况下为'click'
),要执行的function
和(可选)布尔值。
<HTMLElement>.addEventListener('click', <Function>);
例如,要将click
事件监听器添加到<body>
元素中,您应编写:
document.body.addEventListener('click', function () { /* do something */ });
现在创建<img>
:
与您已经做过的一样,createElement
函数通常用于创建HTMLElement
实例。它采用您要创建的元素的标记名,并返回一个新的HTMLElement
。要向该元素添加属性,通常可以通过为属性分配值来实现。请记住,您必须使用null
来删除一个属性。
这将创建一个新的<img>
元素并为其分配属性。
var myImg = document.createElement('img');
myImg.alt = 'A picture of Bill Murray';
myImg.src = 'https://www.fillmurray.com/400/300';
myImg.width = 400;
myImg.height = 300;
要将该图像添加到DOM,请使用appendChild
。要将其放入<body>
元素中:
document.body.appendChild(myImg);
这会将<img>
添加到<body>
子代的末端。
尽管您现在知道如何将新元素放置到DOM中,但不会将其放置在任意位置。为此,您需要结合使用Math.random
和innerWidth
/ innerHeight
。或者,使用getBoundingClientRect
。
function getRandomCoordsIn (element) {
var rect = element.getBoundingClientRect();
// rect has 4 numeric properties: top, left, width, height
// we return a pair of values which always is inside the element passed
return [
rect.top + Math.random() * rect.height, // top
rect.left + Math.random() * rect.width // left
];
}
让我们看看我们可以做什么:
document.body.addEventListener('click', handleClick);
function handleClick () {
var coords = getRandomCoordsIn(document.body);
var myImg = document.createElement('img');
myImg.alt = 'A picture of Bill Murray';
myImg.src = 'https://www.fillmurray.com/400/300';
myImg.width = 400;
myImg.height = 300;
// This assigns inline CSS styles
myImg.style.top = coords[0] + 'px';
myImg.style.left = coords[1] + 'px';
document.body.appendChild(myImg);
}
function getRandomCoordsIn (element) {
var rect = element.getBoundingClientRect();
// rect has some numeric properties, we need: top, left, width, height
// we return a pair of coordinates which is located inside
// the element passed
return [
rect.top + Math.random() * rect.height, // top
rect.left + Math.random() * rect.width // left
];
}
您还需要一些样式:
html { height: 100vh; overflow: auto; }
body { min-height: 100%; }
img { position: absolute; display: block; }