在线展示:https://gethtml.cn/project/2020/04/14/index.html
通过过程我们可以分析出,需要三个事件进行绑定即
首先式html结构,这个非常简单,无非是一张图片在变动下位置即可。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.pic {
width: 160px;
height: 92px;
border-radius: 10px;
box-shadow: 0 0 5px 5px #e5e5e5;
position: absolute;
left: 200px;
top: 200px
}
</style>
</head>
<body>
<img class="pic" src="https://cdn.jsdelivr.net/gh/blogimg/picbed@master/2020/04/13/d8ccc2fd66f340c46b8fb98ed7148223.png">
</body>
</html>
第二步 编写我们的鼠标点击事件。
鼠标点击之前,首先要获取图片对象,不然怎么给图片绑定点击事件呢。这里需要考虑一件事情,即鼠标移动事件在什么时候被触发,很简单,当然是在图片被点击的时候。那么我们就需要一个标志,用于记录是否触发了点击事件。因此第一个事件的代码可以写为:
//获取图片元素对象
var img = document.getElementsByClassName('pic')[0]
//设置开关,并定义克隆的对象。
var cloneImg, flag = false
// 为图片对象绑定事件
img.onclick = function (event) {
flag = true //表示click事件出发了
// 获取鼠标坐标值html
var mouseX = event.pageX
var mouseY = event.pageY
// 计算复制的图片的坐标值(鼠标减去图片大小的一半)
var x = mouseX - 80
var y = mouseY - 46
// 获取原有图片当前显示的宽度和高度
// 复制元素,并且显示(鼠标显示在图片的正中心)在页面中
cloneImg = img.cloneNode()
document.body.appendChild(cloneImg)
//改变克隆对象的坐标
cloneImg.style.left = x + 'px'
cloneImg.style.top = y + 'px'
}
那么接下来要做的就是就是为新创建出来的图片对象赋予鼠标移动事件。这里我们需要判断下标志是否为true,即点击事件是否被触发。同样需要考虑
// 鼠标跟随移动 - 鼠标跟随事件
var html = document || document.documentElement //代表当前页面
html.onmousemove = function (event) {
if (flag === true) {
// 获取鼠标坐标值html
var mouseX = event.pageX
var mouseY = event.pageY
// 计算复制的图片的做编制
var x = mouseX - 80
var y = mouseY - 46
cloneImg.style.left = x + 'px'
cloneImg.style.top = y + 'px'
}
}
那么最后一件事就是鼠标再次点击的情况了,这个情况是在鼠标移动事件时才可以被执行的,那么这个事件就应该写在鼠标移动事件里
html.onmousemove = function (event) {
if (flag === true) {
cloneImg.onclick = release
}
}
function release() {
flag = false
}
此时我们的小项目也就完成了
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.pic {
width: 160px;
height: 92px;
border-radius: 10px;
box-shadow: 0 0 5px 5px #e5e5e5;
position: absolute;
left: 200px;
top: 200px
}
</style>
</head>
<body>
<img class="pic"
src="https://cdn.jsdelivr.net/gh/blogimg/picbed@master/2020/04/13/d8ccc2fd66f340c46b8fb98ed7148223.png" alt="">
<script>
var img = document.getElementsByClassName('pic')[0]
var cloneImg, flag = false
img.onclick = function (event) {
flag = true //表示click事件出发了
// 获取鼠标坐标值html
var mouseX = event.pageX
var mouseY = event.pageY
// 计算复制的图片的做编制
var x = mouseX - 80
var y = mouseY - 46
// 获取原有图片当前显示的宽度和高度
// 复制元素,并且显示(鼠标显示在图片的正中心)在页面中
cloneImg = img.cloneNode()
document.body.appendChild(cloneImg)
cloneImg.style.left = x + 'px'
cloneImg.style.top = y + 'px'
}
// 鼠标跟随移动 - 鼠标跟随事件
var html = document || document.documentElement //代表当前页面
html.onmousemove = function (event) {
if (flag === true) {
// 获取鼠标坐标值html
var mouseX = event.pageX
var mouseY = event.pageY
// 计算复制的图片的做编制
var x = mouseX - 80
var y = mouseY - 46
cloneImg.style.left = x + 'px'
cloneImg.style.top = y + 'px'
cloneImg.onclick = release
}
}
// 释放图片
function release() {
flag = false
}
</script>
</body>
</html>
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有