当前位置: 首页 > news >正文

joomla 宠物网站模板医院网站建设的意义

joomla 宠物网站模板,医院网站建设的意义,asp。net网站开发,美仑-专门做服装的网站拖拽(这两个字看了几遍已经不认识了) 说到拖拽,应用场景不可谓不多。无论是打开电脑还是手机,第一眼望去的界面都是可拖拽的,靠拖拽实现APP或者应用的重新布局,或者拖拽文件进行操作文件。 先看效果图&am…

拖拽(这两个字看了几遍已经不认识了)

说到拖拽,应用场景不可谓不多。无论是打开电脑还是手机,第一眼望去的界面都是可拖拽的,靠拖拽实现APP或者应用的重新布局,或者拖拽文件进行操作文件。

先看效果图,如何实现一个如图HTML元素的拖拽,并排序

HTML中的拖拽事件(drag & drop)

参考MDN中文文档

事件类型

  • drag : 当拖拽的元素或者选中的文本时触发* dragend : 当拖拽元素结束时触发* dragenter : 当拖拽元素或选中的文本到一个可释放目标时触发* dragleave : 当拖拽元素或选中的文本离开一个可释放目标时触发* dragover : 当元素或选中的文本被拖到一个可释放目标上时触发(每 100 毫秒触发一次)* dragstart : 当用户开始拖拽一个元素或选中的文本时触发* drop : 当元素或选中的文本在可释放目标上被释放时触发Coding

写一段简单的CSS和html ,实现初始的页面

css*{margin: 0;padding: 0;box-sizing: border-box;}ul{margin: 200px auto;width: 200px;list-style-type: none;}li{margin: 5px;text-align: center;width: 200px;height: 30px;background: skyblue;}.list .moving{background: transparent;color: transparent;border: 1px dashed #ccc;} 
html<ul class="list"><li >1</li><li >2</li><li >3</li><li >4</li><li >5</li></ul> 

此时我们的页面如下图

现在还不可以进行拖拽操作,为了可以实现拖拽操作,我们必须给每个元素设置 draggable=“true”

 <ul class="list"><li draggable="true">1</li><li draggable="true">2</li><li draggable="true">3</li><li draggable="true">4</li><li draggable="true">5</li></ul> 

元素已经可以基础的拖拽

接下来我们需要在JS中对DOM元素进行一系列操作来实现对应的效果

1.实现拖出去的元素,原位置样式变为透明虚线
2.实现拖动到其他元素上时,列表顺序发生改变

 let list = document.querySelector('.list')let currentLi// 记录拖拽元素 

我们用事件委托,监听 “dragstart” 事件,给拖动的元素添加类名,修改样式,这里会出现奇怪的一幕就是,拖动的样式和原来的样式同时变成了透明。

 list.addEventListener('dragstart',(e)=>{e.dataTransfer.effectAllowed = 'move' // 拖动样式改为 "move"currentLi = e.targetcurrentLi.classList.add('moving')}) 

这里会出现奇怪的一幕就是,拖动的样式和原来的样式同时变成了透明。这是因为跟随鼠标拖动的元素的样式在拖动的那一刻是原始元素的样式,所以也会添加"moving", 那么在这里我们加一个异步

 list.addEventListener('dragstart',(e)=>{e.dataTransfer.effectAllowed = 'move'currentLi = e.targetsetTimeout(()=>{currentLi.classList.add('moving')})}) 

到这里距离目标又更近了一步,

接下来我们需要在拖动的过程中对列表的元素进行重新的排序

Node.insertBefore():方法在参考节点之前插入一个拥有指定父节点的子节点

 list.addEventListener('dragenter',(e)=>{e.preventDefault()// 阻止默认事件if(e.target === currentLi||e.target === list){ // 当移动到当前拖动元素,或者父元素上面我们不做操作return}let liArray = Array.from(list.childNodes)let currentIndex = liArray.indexOf(currentLi) // 获取到拖动元素的下标let targetindex = liArray.indexOf(e.target) // 获取到目标元素的下标if(currentIndex<targetindex){list.insertBefore(currentLi,e.target.nextElementSibling)}else{list.insertBefore(currentLi,e.target)}}) 

最后我们需要在拖拽结束将元素的moving类名移除,以及阻止拖拽到一个目标上的默认事件(否则会出现禁止)

 list.addEventListener('dragover',(e)=>{e.preventDefault()})list.addEventListener('dragend',(e)=>{currentLi.classList.remove('moving')}) 

至此,一个简单的拖拽排序功能就实现了

完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style> *{margin: 0;padding: 0;box-sizing: border-box;}ul{margin: 200px auto;width: 200px;list-style-type: none;}li{margin: 5px;text-align: center;width: 200px;height: 30px;background: skyblue;}.list .moving{background: transparent;color: transparent;border: 1px dashed #ccc;} </style>
</head>
<body><ul class="list"><li draggable="true">1</li><li draggable="true">2</li><li draggable="true">3</li><li draggable="true">4</li><li draggable="true">5</li></ul><script> let list = document.querySelector('.list')let currentLilist.addEventListener('dragstart',(e)=>{e.dataTransfer.effectAllowed = 'move'currentLi = e.targetsetTimeout(()=>{currentLi.classList.add('moving')})})list.addEventListener('dragenter',(e)=>{e.preventDefault()if(e.target === currentLi||e.target === list){return}let liArray = Array.from(list.childNodes)let currentIndex = liArray.indexOf(currentLi)let targetindex = liArray.indexOf(e.target)if(currentIndex<targetindex){ list.insertBefore(currentLi,e.target.nextElementSibling)}else{list.insertBefore(currentLi,e.target)}})list.addEventListener('dragover',(e)=>{e.preventDefault()})list.addEventListener('dragend',(e)=>{currentLi.classList.remove('moving')}) </script>
</body>
</html> 

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

http://www.yayakq.cn/news/675162/

相关文章:

  • 企业网站资料大全长春网站建设机构
  • ps 怎么做网站搜索框互联网十创业项目
  • 阿里 做网站wordpress文章全部登录可见
  • 威海教育行业网站建设wordpress sqlite3
  • 建设网站必备条件网站收录 作用
  • 在门户网站做推广做网站流程内容
  • 惠州企业网站设计手机购物软件有哪些
  • 金融公司做网站域名网站竞价排名
  • 大连最繁华的区是哪个区搜索引擎关键词快速优化
  • 昆山做网站找文博傻瓜式网页制作网站
  • 网站建设课程设计实验报告wordpress用redis和mem
  • 中国建设教育学会网站网站设计公司排名知乎
  • 网站建设源代码上传网络公司网站赏析
  • 宁波网站制作首荐荣盛网络好网站设计规划建设的目的
  • 天津哪家网站设计公司好企业小程序建设公司
  • 网站建设赠送seo什么事网站开发
  • wordpress迁移网站做网站搜索结果的代码
  • 九寨沟网站建设规划书苏州建设银行网站
  • 营销网站seo推广软件工程培训班出来好就业吗
  • 东莞麻涌网站建设团购网站做不起来
  • 汪峰做的音乐网站中国纪检监察报电子报刊
  • 网站建设都是模板欧米茄表官网
  • 专门做推广的网站吗如何建设网站吸引人
  • 网站设计做哪些的简约wordpress
  • 网站外链资源模板网站建设 报价
  • 朝阳区规划网站wordpress输出文章id
  • win10系统可以做网站搭建网站建设空格怎么打
  • 网站跟网页的区别展厅展示公司
  • 电脑网站有哪些如何建设像艺龙一样网站
  • 建设网站前的目的高端网页设计培训