Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >拖动图片改变位置

拖动图片改变位置

作者头像
Dreamy.TZK
发布于 2020-04-16 09:06:25
发布于 2020-04-16 09:06:25
6.8K10
代码可运行
举报
文章被收录于专栏:小康的自留地小康的自留地
运行总次数:0
代码可运行

案例描述

  1. 点击图片可以复制图片
  2. 鼠标移动过程中,会有图片跟随
  3. 再次点击图片,图片固定位置。

在线展示:https://gethtml.cn/project/2020/04/14/index.html

实现过程

通过过程我们可以分析出,需要三个事件进行绑定即

  • 点击事件 点击后创建(复制)一个新的图片
  • 鼠标跟随 图片跟随鼠标移动而移动
  • 停止 即鼠标再次点击图片固定在当前位置。

代码实现

首先式html结构,这个非常简单,无非是一张图片在变动下位置即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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>

第二步 编写我们的鼠标点击事件。

鼠标点击之前,首先要获取图片对象,不然怎么给图片绑定点击事件呢。这里需要考虑一件事情,即鼠标移动事件在什么时候被触发,很简单,当然是在图片被点击的时候。那么我们就需要一个标志,用于记录是否触发了点击事件。因此第一个事件的代码可以写为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//获取图片元素对象
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,即点击事件是否被触发。同样需要考虑

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 鼠标跟随移动 - 鼠标跟随事件
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'
    }
}

那么最后一件事就是鼠标再次点击的情况了,这个情况是在鼠标移动事件时才可以被执行的,那么这个事件就应该写在鼠标移动事件里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
html.onmousemove = function (event) {
    if (flag === true) {  
        cloneImg.onclick = release
    }
}
function release() {
    flag = false
}

此时我们的小项目也就完成了

其他

完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!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>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
原样复制改了图片路径但是不得行怎么办
原样复制改了图片路径但是不得行怎么办
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
JS制作跟随鼠标移动的图片
本文讲解如何使用JS制作可以跟随鼠标移动的图片,我这里是用一直天使的gif图片演示的。
GeekLiHua
2025/01/21
3570
JS制作跟随鼠标移动的图片
js实现碰撞检测
碰撞检测 目录 代码实例 与简易拖拽的差异 下载源码链接 代码实例 <div id="box" style="background: #334;width: 100px;height: 100px;position: absolute;cursor: move;z-index: 999;"></div> <div id="box2" style="background: green;width: 100px;height: 100px;position: absolute;top: 200px;
星辉
2019/01/15
2.8K0
常用鼠标事件
1.禁止鼠标右键菜单 contextmenu主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单
梨涡浅笑
2022/05/08
3.3K0
常用鼠标事件
可视化场景内任意绘制线段并测量距离
在数字孪生可视化场景中,可能会遇到这个问题,即需要测量数字孪生可视化场景中的不同目标之间的距离。通过这个测量,可以明确的知道可视化场景中各个目标的位置以及各个目标之间的距离,便于做出合理的规划。这个需求并不难,我们需要做的是确定需要测量的对象的坐标点起点和终点位置。
thingjs
2021/08/16
4040
前端学习(50)~事件的绑定和事件对象
我们在之前的一篇文章《04-JavaScript/22-DOM简介和DOM操作》中已经讲过事件的概念。这里讲一下绑定(注册)事件的两种方式,我们以onclick事件为例。
Vincent-yuan
2020/03/19
9730
「JavaScript 」动画基础 - 01
请注意,本文编写于 2086 天前,最后修改于 174 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
5270
「JavaScript 」动画基础 - 01
“穿透”层的鼠标事件
需要实现如下的效果,有一个浮动层,需要层级在它之下的一个元素也能照常响应相应的事件
meteoric
2018/11/15
1.7K0
使用 JavaScript 实现简单的拖拽
首先,对拖拽的元素绑定 mousedown 时间,使其触发对应的函数,获取元素与鼠标的位置。在 document 对象上绑定 mousemove 和 mouseup 事件,不在拖拽的元素上绑定是因为当鼠标移动太快而超出元素的范围时会停止拖拽,而绑定在 document 上则可以避免这样的事情发生。拖拽再快都不会超出 document 的范围。
ihoey
2018/10/31
1.6K0
常用鼠标事件
常用鼠标事件 1 、案例:禁止选中文字和禁止右键菜单 <body>    我是一段不愿意分享的文字    <script>        // 1. contextmenu 我们可以禁用右键菜单
星辰_大海
2020/09/30
2K0
JavaScript进阶之实现拖拽
如果不设置这段代码,会发生奇怪的现象,这是因为浏览器有自己的对图片和一些其他元素的拖放处理,会在我们拖放时自动运行,这与我们的拖放处理产生了冲突。
落落落洛克
2021/01/08
2.7K0
JavaScript进阶之实现拖拽
杨老师课堂之Jquery的筛选,事件,效果,Ajax,javascript跨域)
D.closest()获得D所有父元素,含自己(D、B、A)与 D.parents() 对比
杨校
2018/12/06
8.4K0
元素偏移量 offset 系列
offset 翻译过来就是偏移量, 我们使用 offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等。
星辰_大海
2020/09/30
1.2K0
工作中碰到的js问题(disabled表单元素不能提交到服务器)
今天碰到一个奇葩的问题,asp页面表单提交后,有一个文本框<input type="text" name="phone" id="phone" />在后台获取不了,
tandaxia
2018/09/27
2K0
js实现简易拖拽
scrollWidth:对象的实际内容的宽度,不包括边线宽度 clientWidth:对象内容的可视区的宽度,不包括边线宽度 offsetWidth:对象整体的实际宽度,包括滚动条等边线
星辉
2019/01/15
6.5K0
【如果你要学JS XII】——使用js实现模态框拖动
这篇文章来实现一下js中的放大镜效果,以及如何实现模态框拖动效果 先来了解一下offset,client和scroll系列属性
像素人
2023/12/25
2420
【如果你要学JS XII】——使用js实现模态框拖动
JavaScript案例:跟随鼠标的天使
mousemove只要我们鼠标移动1px 就会触发这个事件 核心原理: 每次鼠标移动,我们都会获得最新的鼠标坐标, 把这个x和y坐标做为图片的top和left 值就可以移动图片 注意要给left 和top 添加px 单位 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
岳泽以
2022/10/26
6400
JavaScript案例:跟随鼠标的天使
怎么设置jQuery中的事件和动画
                1.1.3. 案例1:测试两种方式的区别【个数+顺序】 
天蝎座的程序媛
2022/11/18
2.6K0
js实现磁性吸附
磁性吸附 目录 代码实例 与限定范围拖拽的差异 下载源码链接 代码实例 * { padding: 0; margin: 0; } #box1 { width: 500px; height: 500px; background: #999; position: relative; left: 100px; top: 100px; } #box { width: 100px; height: 100px; bac
星辉
2019/01/15
2.6K0
前端学习(51)~事件的传播和事件冒泡
重点:捕获阶段,事件依次传递的顺序是:window --> document --> html--> body --> 父元素、子元素、目标元素。
Vincent-yuan
2020/03/19
1K0
【实战】Canvas实现图片上标注、缩放、移动和保存历史状态
面试官说可以往深层次思考一下,或许加一些新的功能来增加项目的难度,他提了几个建议,其中一个就是试卷在线批阅,老师可以在上面对作业进行批注,圈圈点点等俺当天晚上就开始研究这个东东哈哈哈,终于被我研究出来啦!
Nealyang
2020/06/10
7.1K0
【实战】Canvas实现图片上标注、缩放、移动和保存历史状态
相关推荐
JS制作跟随鼠标移动的图片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验