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

2023新闻摘抄10条如何优化网络速度

2023新闻摘抄10条,如何优化网络速度,十大不受限制的浏览器,返利网站建设在业务中列表拖拽排序是比较常见的需求,常见的JS拖拽库有Sortable.js,Vue.Draggable等,大多数同学遇到这种需求也是更多的求助于这些JS库,其实,使用HTML原生的拖放事件来实现拖拽排序并不复杂,结合Vue的tra…

        在业务中列表拖拽排序是比较常见的需求,常见的JS拖拽库有Sortable.js,Vue.Draggable等,大多数同学遇到这种需求也是更多的求助于这些JS库,其实,使用HTML原生的拖放事件来实现拖拽排序并不复杂,结合Vue的transition-group,还能快速的给排序添加过渡动画。

HTML5拖放api

1. 设置元素为可拖放

为了使元素可拖动,把 draggable 属性设置为 true :

<div draggable="true">能被拖放的元素</div>
2. 拖放事件

拖放涉及到两种元素,一种是被拖拽元素(源对象),一种是放置区元素(目标对象)。如下图所示,按住A元素往B元素拖拽,A元素即为源对象,B元素即为目标对象。

触发对象事件名称说明
在拖动目标上触发事件ondragstart用户开始拖动元素时触发
ondrag元素正在拖动时触发
ondragend用户完成元素拖动后触发
释放目标时触发的事件ondragenter当被鼠标拖动的对象进入其容器范围内时触发此事件
ondragover当某被拖动的对象在另一对象容器范围内拖动时触发此事件
ondragleave当被鼠标拖动的对象离开其容器范围内时触发此事件
ondrop当在一个拖动过程中,释放鼠标键时触发此事件

需要注意的是:dragenterdragover事件的默认行为是拒绝接受任何被拖放的元素。因此,我们要在这两个拖放事件中使用preventDefault来阻止浏览器的默认行为;而且目标对象想要变成可释放区域,必须设置dragoverdrop 事件处理程序属性。

基于vue的拖拽排序

先不考虑排序动画,解释一下实现思路:

  • 由于拖动是实时的,所以没有使用drop而是使用了dragenter触发排序。
  • 在源对象开始被拖拽时记录其索引dragIndex,当它进入目标对象时(对应dragenter事件),将其插入到目标对象的位置。
  • 其中dragenter方法中有一个判断this.dragIndex !== index(index为当前目标对象的索引),这是因为源对象同时也是目标对象,当没有这个判断时,源对象开始被拖拽时就会立刻触发自身的dragenter事件,这是不合理的。

 

有动画的拖拽排序

        把HTML的ul元素改为transition-group,在CSS中新增一个过渡transition: transform .3s;,就可以实现有动画的拖拽排序

改造成可复用的组件

<template><transition-group name="drag" class="list" tag="ul"><li@dragstart="dragstart(index)"@dragenter="dragenter($event, index)"@dragend="dragend"@dragover.prevent:draggable="draggable"v-for="(item, index) in list":key="item.id"class="list-item"><slot :scope="item" :index="index"></slot></li></transition-group>
</template><script>
export default {name: "DragList",model: {prop: "data",event: "change",},props: {// 唯一的key值是iddata: {type: Array,default: () => [],},draggable: {type: Boolean,default: false,},},data() {return {dragIndex: "",};},computed: {list() {return [...this.data];},},methods: {// 拖拽元素(源对象)dragstart(index) {if (!this.draggable) return;this.dragIndex = index;},// 目标元素dragenter(e, index) {e.preventDefault();if (!this.draggable) return;// 避免源对象触发自身的dragenter事件if (this.dragIndex !== index) {const moving = this.list[this.dragIndex]; // 拖拽元素this.list.splice(this.dragIndex, 1); // 删除拖拽元素this.list.splice(index, 0, moving); // 在目标元素中追加拖拽元素// 排序变化后目标对象的索引变成源对象的索引this.dragIndex = index;this.$emit("change", this.list);}},dragover(e) {e.preventDefault();},dragend() {this.$emit("dragend");},},
};
</script><style lang="less" scoped>
.list {list-style: none;.drag-move {transition: transform 0.3s;}.list-item {// cursor: move;// width: 300px;// background: #ea6e59;// border-radius: 4px;// color: #fff;// margin-bottom: 6px;// height: 50px;// line-height: 50px;// text-align: center;}
}
</style>

http://www.shuangfujiaoyu.com/news/24795.html

相关文章:

  • 马鞍山网站建设价格企业网站建设cms
  • 广州住房城乡建设委网站seo综合查询站长工具怎么用
  • 毕设 网站开发的必要性在线网站建设
  • 动漫做美食的视频网站免费一键搭建网站
  • 忻州网站建设平面设计培训费用一般是多少
  • asp网站开发参考文献哪些平台可以发广告
  • 怎么做电影网站教程百度seo按天计费
  • 汕头市通信建设管理局网站aso关键词搜索优化
  • 网站设计中的日历怎么做东莞百度seo新网站快速排名
  • 南京哪家公司做企业网站 做得比较好万网官网域名查询
  • 繁体版 企业网站企业营销策划书模板
  • 网站建设卖给别人可以吗seo培训机构排名
  • 新疆生产建设兵团十二师公积金网站百度投放广告联系谁
  • 常熟网站建设专业的公司最近几天的重大新闻事件
  • centos 6.5 搭建wordpressseo排名工具有哪些
  • 做网站下载什么软件seo技术培训唐山
  • 农产品电商网站建设网站开发的流程
  • .帮别人做网站网站seo外包价格
  • 黄岛王台有做网站的吗北京seo如何排名
  • 做衣服网站的实验感想天津百度推广代理商
  • 上海品质网站建设百度seo推广是什么
  • 个人做网站 需要学什么只是2022拉人头最暴利的app
  • 网站建设和维护工作总结市场营销网络
  • 青岛专业网站开发公司新冠疫情最新消息今天
  • 网站建设协议书模板 完整版营销怎么做
  • 网站一年费用多少钱seo竞价推广
  • 担路做网站外链吧
  • 临淄房产信息网seo怎么优化武汉厂商
  • 高性能网站建设视频运营管理平台
  • 怎样建设网站内容百度网盘搜索引擎网站