Web前端中实现一个拖动效果

发布时间:2021-05-06

在原生客户端开发中,窗口拖动是一个比较常用的操作。今天把这个效果在网页客户端中实现以下,文章记录一下效果。

分析梳理

拖动操作主要分为三部分:第一,对着需要拖动的元素按下鼠标,获取要拖动物体的位置;第二,滑动鼠标,注意在滑动鼠标的时候,鼠标一直是处于按下状态的并且元素应该是随着鼠标一起移动;第三,到达目标位置,松开鼠标。

实现

首先,拿到要拖动的物体,并注册鼠标按下事件。当鼠标按下时,开始监听页面的鼠标滑动事件,拿到实时位置坐标。再监听鼠标弹起事件,用来移除之前注册的页面事件,防止物体一直跟随无法停止。

<div id="container">container</div>

Js代码如下

const container = document.querySelector('div#container');
let disX = 0,
    disY = 0;
container.addEventListener('mousedown', ev => {
    disX = ev.clientX - container.offsetLeft;
    disY = ev.clientY - container.offsetTop;
    document.addEventListener('mousemove', mov);
    document.addEventListener('mouseup', up);
})

function mov(ev) {
    var ev = ev || event;
    container.style.left = ev.clientX - disX + 'px';
    container.style.top = ev.clientY - disY + 'px';
}

function up(ev) {
    document.removeEventListener('mousemove', mov);
    document.removeEventListener('mouseup', up);
    container.classList.remove('mov');
}

有兴趣可以自己试一试不注销事件监听会有什么效果。

其他阅读

未来设计趋势-Bento Layout/便当布局

前几天找网站设计的灵感的时候,发现一个介绍2024年网站设计趋势的视频,里面介绍了一个叫 Bento Layout 的趋势,今天就给大家分享一下什么是 Bento Layout,中文称为“便当布局”。

查看原文

vscode Material Design Theme

Material Design Theme 是由猪头少年(scung-cn)开发的一套基于 Material Design 设计语言的 Visual Studio Code 主题插件,可以在扩展市场上直接下载安装。

查看原文

HTTP状态码

HTTP状态码为客户端提供了一种理解事务处理结果的边界方式。本文列出一些原因短语,所使用的是HTTP/1.1规范所定义的。

查看原文

WPF中创建一个矩形圆角动画

WPF 中内置了好几种动画,大多数场景可以坐到开箱即用,不过并没有内置 CornerRadiusAnimation ,本文将会介绍怎么实现一个 CornerRadiusAnimation 动画,实现 BorderCornerRadius 属性动画效果。

查看原文

记录Unity中的坑

Unity虽然使用C#来进行开发,但是Unity所使用的运行时和.net的原生运行时却又差别,这导致在.net中的某些代码块在Unity中运行会出现错误。

查看原文