jquery插件-自由拖拽
最近工作不是很忙,学习之余想整理一些代码出来,首先想到的就是是js拖拽。 两年前去某公司面试的时候,曾经被问过这个问题,如何在页面上拖放元素,尽管现在看起来很简单,但当时的我半点思路都没有,面试想当然失败了。 这两天趁空闲整理出一个自由拖拽的jquery插件:jquery.jsDrag.js。
js拖拽主要用到了鼠标三个事件:mousedown、mousemove、mouseup。
mousedown:鼠标按下
mouseup:鼠标松开
mousemove:鼠标移动
mousedown和click的区别:鼠标点击的整个过程会发生 mousedown→mouseup→click三个事件, click在最后鼠标松开之后才会发生。
htm框架:<div class="jsDrag" ><div class="drager"></div></div>,.drager素是我们点击拖拽的元素,.jsDrag为拖拽元素可移动的空间。
调用方式:$(".jsDrag").drag(setting) 目前提供三种方式,自由拖拽,横向拖拽,纵向拖拽,省略参数的情况下为自由拖拽
现在只接收一个属性
type:free|horizontal|vertical
插件源码:
JS
(function($){
$.fn.extend({
drag: function(setting){
var settting = setting || {};
var config = {
type: "free"
};
config = $.extend(config, setting);
this.each(function(){
var $panel = $(this) ;
var $drag = $panel.find(".drager");
var coor = {};
var pos = {};
var flag = false;
$drag.mousedown(function(evt){
coor.cX = evt.clientX;
coor.cY = evt.clientY;
pos.left = parseInt($drag.css("left"));
pos.top = parseInt($drag.css("top"));
flag = true;
});
$(document).mousemove(function(evt){
if (flag) {
var maxWidth = $panel.width() - $drag.width();
var maxHeight = $panel.height() - $drag.height();
var nowLeft = (pos.left+(evt.clientX-coor.cX));
var nowTop = (pos.top+(evt.clientY-coor.cY));
pos.left = nowLeft <= 0 ? 0 : (nowLeft > maxWidth ? maxWidth : nowLeft);
pos.top = nowTop <= 0 ? 0 : (nowTop > maxHeight ? maxHeight : nowTop);
var cssParam = {"left": pos.left, "top":pos.top};
switch (config.type) {
case "free" :
break;
case "horizontal" :
delete cssParam["top"];
break;
case "vertical" :
delete cssParam["left"];
break;
}
$drag.css(cssParam);
coor.cX = evt.clientX;
coor.cY = evt.clientY;
}
}).mouseup(function(evt){
flag = false;
});
});
return this;
}
});
})(jQuery);
CSS
.jsDrag {
position:relative;
width:800px;
height:50px;
margin:0 auto;
background:#FF0;
border:1px solid #ccc;
}
.drager {
background:#000;
width:10px;
height:10px;
position:absolute;
top:;
left:;
cursor:pointer;
}
需要注意的是,不要给.jsDrag 设置padding等样式, 有需要的话可以把样式设置到.jsDrag父元素上
jquery插件-自由拖拽的更多相关文章
- jQuery插件(拖拽)
拖曳插件draggable的功能是拖动被绑定的元素,当这个jQuery UI插件与元素绑定后,可以通过调用draggable()方法,实现各种拖曳元素的效果,调用格式如下: $(selector). ...
- jquery插件之拖拽改变元素大小
该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被 ...
- jquery插件之拖拽
该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽效果,您可以根据自己的实际需求来设置被拖拽元素是否可 ...
- jQuery网页元素拖拽插件
效果说明:配合已有CSS样式,载入插件后,网页元素可以随意在窗口内拖拽,设置了原位置半透明和拖拽半透明的效果选项,可根据需要选择.另外,当页面上有多个可拖拽元素时,可以载入另外一个用于设置z-inde ...
- jQ插件--时间线插件和拖拽API
这个时间轴是工作上用到的,自己写了一个, qq空间有时间轴的控件, 百度文库也有时间轴的控件: 百度的时间轴大概是这样的: 用户点击对应的锚链接, 那个三角会滚动, 然后左侧的界面也会滚动: 实际的 ...
- 简洁的drag效果,自由拖拽div的实现及注意点
偶然间看到了以前做的一个简洁的div拖拽效果,修改了一下加点注释,经测试完美通过firefox/chrome/ie6-11,现拿来分享一下. 先说一下实现原理及要点,最主要的有三步.第一步是mouse ...
- jquery 实现页面拖拽并保存到cookie
实现的效果就是页面内的图片可拖拽到任意位置,并将所在位置保存.下次打开页面依然可见.本文是作demo用,实际开发中,位置的数据应保存到数据库中. 好了,开始. 1.准备工作. a.jquery(1.7 ...
- JQuery UI的拖拽功能
JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...
- jquery实现可拖拽的div
由于项目中并未引入前端开发框架easyui.ext.没有现成的控件可以使用,今天时间算是充裕的时候,自己写了一个可以拖拽.放大缩小的例子.欢迎大家指正. 不啰嗦,上代码: 依赖的文件:jquery.j ...
随机推荐
- C语言的操作符号
#include <iostream> int main(void) { int a = 100, b = 40; //理解++在前还后的区别: a = b++; //a = b ; b= ...
- SpringCloud之客户端连接Eureka集群
客户端分别yml: ###服务启动端口号 server: port: 8002 ###服务名称(服务注册到eureka名称) spring: application: name: app-toov5- ...
- EntityFramework 学习 一 并发
EntityFramework默认支持乐观并发 乐观并发中,实体加载后如果都没发生变化,ef保存该实体 首先,我们需要一个rowversion列为了控制student实体的并发问题,rowversio ...
- stdcall、cdecl详解(以及WINAPI和CALLBACK之类的宏对应什么)
转自:http://blog.csdn.net/huanjieshuijing/article/details/5822942 对_stdcall 的理解在C语言中,假设我们有这样的一个函数:int ...
- html基础学习(注意点)
浏览器会自动地在块级元素(<p><h1>)的前后添加空行 当显示页面时,浏览器会移除源代码中多余的空格和空行.所有连续的空格或空行都会被算作一个空格.需要注意的是,HTML 代 ...
- Linux课程---8、Linux启动流程
Linux课程---8.Linux启动流程 一.总结 一句话总结: grub启动引导界面(比如装了多系统,选择系统),找到linux内核 启动init程序,加载各种驱动 1.进入grub界面选择相应的 ...
- priority_queue用法(转载)
关于priority_queue 1,关于STL中的priority_queue:确定用top()查看顶部元素时,该元素是具有最高优先级的一个元素. 调用pop()删除之后,将促使下一个元素进入该位置 ...
- hbase_学习_00_资源帖
一.官方资料 1.官网:http://hbase.apache.org/ 2.官方文档:HBase 官方文档中文版 二.apache软件下载基地 1. Apache Software Foundati ...
- codeforces 459D D. Pashmak and Parmida's problem(离散化+线段树或树状数组求逆序对)
题目链接: D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per test 256 megab ...
- 属性成员是isXxx时对应的get方式是isXxx,前台jsp取不到这个属性值
最近在项目中无意设置的boolean变量值为isXxx,用eclipse生成相应的set和get方法,eclipse生成的的boolean类型的get方法为isXxx,前台导致取不到相应的值 publ ...