javascript实现拖曳与拖放图片
javascript实现拖曳与拖放图片
其实对于drag和drop拖曳与拖放事件IE很早以前就支持这个操作了,我们先来看看HTML5中新增的拖放API。
在HTML5中想要实现拖放操作,至少要做以下操作:
1. 将要拖放的对象元素的draggable属性设置为true,即(draggable="true"),这样才能拖放该元素,且img元素与a元素(必须指定href)默认允许拖放操作。如代码:
<li draggable="true">Item 1</li>
2. 编写与拖放有关的事件处理代码,有以下事件需要我们知道的。如下:
1): dragstart: 当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上.
2): drag: 拖放过程中触发的事件,此事件作用在被拖放到元素上。
3): dragenter: 拖放元素进入目标元素触发的事件,此事件作用在目标元素上。
4): dragover: 拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上.
5): dragleave: 被拖放到元素离开目标元素的时候,此事件作用在目标元素上。
6): drop: 有其他元素被拖放到目标元素上,此事件作用在目标元素上。
7): dragend: 拖放操作结束:此事件作用在拖放元素上。
3. DataTransfer对象:
| dropEffect属性 |
表示拖放操作的视觉效果,允许设置其值,该效果必须在用effectAllowed属性指定的允许的视觉效果范围之内,允许指定的值有:none,copy,link,move |
| effectAllowed属性 | 用来指定当元素被拖放时所允许的视觉效果,可以指定的值有none,copy,copyLink,copyMove,link,linkMove,move,all,unintialize. |
先了解这些内容对于我们现在这个demo来说已经够了!具体的想多了解可以去看看HTML5中的拖放与拖曳API。
我们可以先来看看JSFiddler中的效果:
你可以狠狠的点击这里:javascript实现拖放与拖曳图片的DEMO
所有的JS代码如下:
/**
* javascript拖放元素
*/ function Sortable(cfg){ this.cfg = $.extend({},defaults,cfg || {});
this._init();
};
$.extend(Sortable.prototype,{
// 函数初始化
_init: function(){
var self = this;
var cfg = self.cfg;
if(cfg.container == null) {return;}
var placeholders = $(),
dragging; // 该容器下的子元素
$(cfg.container).each(function(index,curItem){
var items = $(curItem).children();
var placeholder = $('<' + items[0].tagName + ' class="sortable-placeholder">');
placeholders = placeholders.add(placeholder); items.attr("draggable","true").on('dragstart',function(e){
var dt = e.originalEvent.dataTransfer;
dt.effectAllowed = 'move';
index = (dragging = $(this)).index();
}).on('dragend',function(e){
dragging.fadeIn();
placeholders.detach();
}).not('a[href], img').on('selectstart', function() { //禁止鼠标选中文字
this.dragDrop && this.dragDrop();
return false;
}).end().add([this, placeholder]).on("dragover dragenter drop",function(e){
if (e.type == 'drop') {
e.stopPropagation();
placeholders.filter(':visible').after(dragging);
return false;
}
e.preventDefault();
e.originalEvent.dataTransfer.dropEffect = 'move';
if (items.is(this)) {
dragging.hide();
$(this)[placeholder.index() < $(this).index() ? 'after' : 'before'](placeholder);
placeholders.not(placeholder).detach();
}
return false;
});
}); }
}); var defaults = {
container : null
};
代码初始化如下:
new Sortable({
"container": '.demoList'
});
container:是指要拖放的容器。其他任何操作不需要,html代码还是和往常一样书写,至于draggable="true"这个属性,JS里面会自动为当前容器的子元素增加这个属性,所以对于使用者可以不用关心这些细节的操作;比如上面的demo HTML代码 可以和往常一样写:
如HTML代码如下:
<ul class="connected list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
</ul>
加上CSS如下:
h1, h2 {
text-align: center;
font-weight: normal;
}
.connected li, .sortable li{
list-style: none;
border: 1px solid #CCC;
background: #F6F6F6;
font-family: "Tahoma";
color: #1C94C4;
margin: 5px;
padding: 5px;
height: 22px;
}
li.highlight {
background: #FEE25F;
}
.connected {
float: left;
width: 200px;
}
.connected.no2 {
float: right;
}
li.sortable-placeholder {
border: 1px dashed #CCC;
background: none;
}
复制上面的JS,然后代码初始化就这样,就ok了 如下初始化:
new Sortable({
"container": '.connected'
});
javascript实现拖曳与拖放图片的更多相关文章
- JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传
主题: JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串.blob对象在上传. 用处: 从本地选择图片上传,如项目规定只能选择本项目文件夹下的图像上传为头像等. 主要思想: ...
- JavaScript 实现用户点击图片放大
JavaScript 实现用户点击图片放大 一.契机 情况是这样的,之前推荐朋友去建站.后面他专门写了一篇文章说如何实现 "用户点击图片实现放大效果",俺就好好 "拜读& ...
- 第一百五十七节,封装库--JavaScript,预加载图片
封装库--JavaScript,预加载图片 首先了解一个Image对象,为图片对象 Image对象 var temp_img = new Image(); //创建一个临时区域的图片对象alert ...
- javascript异步上传压缩图片并立即显示图片
javascript异步上传压缩图片并立即显示图片<pre><!doctype html><html><head><meta charset=&q ...
- 最新javascript自动按比例显示图片,按比例压缩图片显示
最新javascript自动按比例显示图片,按比例压缩图片显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- 用javascript实现base64编码器以及图片的base64编码
前面的话 base-64作为常见的编码函数,在基本认证.摘要认证以及一些HTTP扩展中得到了大量应用.在前端领域,也常常把图片转换为base-64编码在网络中传输.本文将详细介绍base64的原理及用 ...
- 纯javaScript、jQuery实现个性化图片轮播
纯javaScript实现个性化图片轮播 轮播原理说明<如上图所示>: 1. 画布部分(可视区域)属性说明:overflow:hidden使得超出画布部分隐藏或说不可见.position: ...
- html+css+javascript实现简易轮播图片
html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <lin ...
- JavaScript(六)——实现图片上下或者左右无缝滚动
/*! jQuery v1.8.3 jquery.com | jquery.org/license */ (function(e,t){function _(e){var t=M[e]={};retu ...
随机推荐
- 理解Java序列化
前言 Java对象是在JVM中产生的,若要将其进行传输或保存到硬盘,就要将对象转换为可传输的文件流.而目前Java对象的转换方式有: 利用Java的序列化功能序列成字节(字节流),一般是需要加密传输时 ...
- 1-初识java
目录 java 历史 Java 平台 Java 开发环境 Java 运行原理[简] Java 历史 这里不详细记录java的历史,只是标记出时间点和事件. 时间点 事件 1991 Sun公司成立Gre ...
- 如何启动一个Vue2.x项目
1. cd到工作目录2. npm init -y3. 先查看有没有安装全局的vue-cli,:vue-V,没有的话安装一下:npm install vue-cli4. 创建项目: vue init w ...
- PDO中的预处理
PDO中的基本的原理和步骤和MySQL中的预处理都是一样的,只不过就是把MySQL中的预处理所有命令行的语法封装成了PDO对象的几个公开的方法而已! 1.发送预处理语句 此时,我们需要调用pdo对象的 ...
- php对文件的操作
如何让自己磁盘中的文件夹和目录显示在网页上?那就来看一下,用php是怎么来操作他们的吧 php中文件,一般包含两块内容,文件和目录先来一句一句的看代码,及他的作用 运行后看一下结果 file 指的是文 ...
- Linux 配置iso系统盘为本地yum源
Linux配置iso系统盘为本地yum源 by:授客 QQ:1033553122 1.目的 安装软件时,经常会遇到包或类库的依赖性问题,为此,我们可以通过yum命令安装软件,尽量避免出现繁琐的软件 ...
- Expo大作战(二十三)--expo中expo kit 高级属性(没干货)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Python笔记(八):web开发
#本文是在Windows环境下,Unix系统应该还要设置2个东西 (一) 采用MVC设计web应用 遵循 模型-视图-控制器(model-view-controlle) 模型:存储web应用 ...
- Python笔记(四):异常处理机制与 open()
(一) 异常处理机制概述 就像日常生活中会遇到各种意外情况一样(例如:你可能考虑过如果中了500w该怎么做),代码运行过程中也会遇到这种意外情况,python提供了这么一种机制,处理意外情况(就像如 ...
- smarty详细使用教程(韩顺平smarty模板技术笔记)
MVC是一种开发模式,强调数据的输入.处理.显示是强制分离的 Smarty使用教程1.如何配置我们的smarty解压后把libs文件夹放在网站第一级目录下,然后创建两个文件夹templates 存放模 ...