前端培训-中级阶段(19)-拖拽API

简介: 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。其实在之前就写过一篇拖拽相关的内容。今天简单说说吧。拖拽想要实现分为两种形式:模拟实现drag API 实现M 端表现pc 端表现

bVbyjHw.webp.jpg


模拟实现拖拽


实现方案


  1. 鼠标按下的时候记录按下的DOM。(如果有需要会进行查询父级)


  1. 鼠标移动时,根据鼠标位置修改DOM的位置。(如果要求原位置不变,可以clone一个新的)


  1. 鼠标抬起的时候判断父级不同则移入。(如果有需要会进行查询父级,如果是同级的标签可以做排序操作,目前代码中是追加)


测试地址


实现代码

var drapDOM = null;
window.addEventListener('mousedown', function(e){
    if(e.target.classList.contains('drap')){
        drapDOM = e.target;
    }
})
window.addEventListener('mousemove', function(e){
    if(drapDOM){
        drapDOM.style.position = 'fixed';
        drapDOM.style.pointerEvents =  'none';
        drapDOM.style.left = e.clientX + 'px'
        drapDOM.style.top = e.clientY + 'px'
        console.log(e)
    }
})
window.addEventListener('mouseup', function(e){
    console.log(e.target)
    if(drapDOM){
        drapDOM.style.position = 'initial';
        drapDOM.style.pointerEvents =  'initial';
        drapDOM.style.left = '0'
        drapDOM.style.top = '0';
        if(drapDOM.parentNode != e.target){
            e.target.appendChild(drapDOM)
        }
        drapDOM = null
    }
})


注意事项


  1. drapDOM.style.pointerEvents = 'none' 防止副本干扰e.target


  1. 可以拖拽的DOM


  1. 可以放置的DOM


drag API 实现


先说说有什么好处

  1. 可以自动生成副本样式


  1. 动作周期的事件,可以方便的区分出(目标对象与源对象)


  1. ondragstart:源对象开始被拖动
  2. ondrag:源对象被拖动的过程中
  3. ondragend:源对象被拖动结束
  4. ondragenter:目标对象被源对象拖动进入
  5. ondragover:目标对象被源对象悬浮在上面
  6. ondragleave:源对象拖动着离开了目标对象
  7. ondrop:源对象拖动着在目标对象上方松手


  1. 数据传递:


  1. 源对象数据保存:e.data.Transfer.setData(k,v)//k-v必须都是string类型
  2. 目标对象获取数据:e.data.Transfer.getData(k,v)


实现方案


测试地址


  1. 可拖拽点增加属性( draggable="true"


  1. 可拖拽点增加监听函数 dragstart 记录当前拖拽点


  1. 放置点增加监听函数 dropdragover 阻止默认事件,防止(打开、不能拖拽)


  1. 放置点增加监听函数 drop 判断如果拖拽点不在放置点内(if(!$(ev.target).find(dragged).length){)就追加


实现代码

var dragged;
function allowDrop(ev){
    // console.log('allowDrop', ev)
    ev.preventDefault();
}
function drag(ev){
    // console.log('drag', ev)
}
function drop(ev){
    console.log('drop', ev)
    ev.preventDefault();
    if(!$(ev.target).find(dragged).length){
        $(ev.target).append(dragged)
    }
}
function dragstart(ev){
    dragged = ev.target;
}
$(function(){
    $('ul').off().on('drop', drop).on('dragover', allowDrop)
    $('li[draggable="true"]').off().on('drag', drag).on('dragstart', dragstart)
})


注意事项


  1. 放置点增加监听函数 dropdragover 阻止默认事件,防止(打开、不能拖拽)


  1. draggable="true" 用来标识这是一个可拖拽点。


  1. M端 和 PC端 表现其实还不一样的。比如M拖动会触发滚动


其他方案&开源框架


  1. jquery-ui


  1. sortable.js
相关文章
|
3月前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
120 2
|
4月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
2月前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
259 0
|
3月前
|
XML 缓存 JavaScript
提升对前端的认知,不得不了解Web API的DOM和BOM
该文章强调了在前端开发中理解和掌握DOM(文档对象模型)和BOM(浏览器对象模型)的重要性,并介绍了它们的相关操作和应用。
提升对前端的认知,不得不了解Web API的DOM和BOM
|
4月前
|
JSON 前端开发 API
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
构建前端防腐策略问题之更新getMemoryUsagePercent函数以适应新的API返回格式的问题如何解决
|
4月前
|
JavaScript 前端开发 API
Vue.js 3.x新纪元:Composition API引领潮流,Options API何去何从?前端开发者必看的抉择指南!
【8月更文挑战第30天】Vue.js 3.x 引入了 Composition API,为开发者提供了更多灵活性和控制力。本文通过示例代码对比 Composition API 与传统 Options API 的差异,帮助理解两者在逻辑复用、代码组织、类型推断及性能优化方面的不同,并指导在不同场景下的选择。Composition API 改善了代码可读性和维护性,尤其在大型项目中优势明显,同时结合 TypeScript 提供更好的类型推断和代码提示,减少错误并提升开发效率。尽管如此,在选择 API 时仍需考虑项目复杂性、团队熟悉度等因素。
58 0
|
5月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理
|
4月前
|
开发框架 前端开发 API
使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理
使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理
|
5月前
|
开发框架 前端开发 应用服务中间件
部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
|
9天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
54 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
下一篇
DataWorks