103 extend 插件入口 jquery eq 和get的封装 拖拽插件

//demo.js

window.onload = function () {

//个人中心

$().getClass("member").hover(function(){

$(this).css("background","url(images/arrow2.png) no-repeat 55px center");

$().getClass("member_ul").show();

},function(){

$().getClass("member_ul").hide();

$(this).css("background","url(images/arrow.png) no-repeat 55px center");

});

//登陆框

var login=$().getId("login");

var sreen=$().getId("screen");

login.center(350,250).resize(function(){

if (login.css(‘display‘) == ‘block‘) {

sreen.lock();

}

});

$().getClass("login").click(function(){

login.css("display","block");

});

$().getClass("close").click(function(){

login.css("display","none");

});

$().getClass("login").click(function(){

login.css("display","block");

sreen.lock();

});

$().getClass("close").click(function(){

login.css("display","none");

sreen.unlock();

});

//拖拽

//  login.drag([$().getTagName("span").eq(0),$().getTagName("h2").eq(0)]); //可以指定多个地方拖拽

login.drag([$().getTagName("h2").get(0)]);//如果有多个h2的话将至运行第一个

alert($().getTagName("h2").get(0))   //htmlelement

alert($().getTagName("h2").eq(0))  //object

};

**********************************************0我是分割线0.********************************************************************************

//接下来这个文件时亮点,把拖拽封装成插件

//base_drag.js

/**

* Created by Administrator on 2015/5/7.

*/

$().extend("drag",function(tags){

for(var i=0;i<this.elements.length;i++)

{  addEvent( this.elements[i],"mousedown",function(e) {

var _this=this;

var diffX= e.clientX-_this.offsetLeft;

var diffY= e.clientY-_this.offsetTop;

//自定义拖拽区域

var flag = false;

for (var i = 0; i < tags.length; i ++) {

if (e.target == tags[i]) {

flag = true;
//只要有一个是true,就立刻返回

break;

}

}

if(flag)

{

addEvent(document,"mousemove",move);

addEvent(document,"mouseup",up);

}

else

{

removeEvent(document,"mousemove",move);

removeEvent(document,"mouseup",up);

}

function move(e){

var e = getEvent(e);

// e.preventDefault();//阻止默认事件

var left = e.clientX - diffX;

var top = e.clientY - diffY;

if (left < 0) {

left = 0;

} else if (left > getInner().width - _this.offsetWidth) {

left = getInner().width - _this.offsetWidth;

}

if (top < 0) {

top = 0;

} else if (top > getInner().height - _this.offsetHeight) {

top = getInner().height - _this.offsetHeight;

}

_this.style.left = left + ‘px‘;

_this.style.top = top + ‘px‘;

if(_this.setCapture)//iE鼠标拖拽出了目标节点的时候不能再获取到事件

{

_this.setCapture();

}

}

function up()

{

if(_this.releaseCapture)//iE鼠标拖拽出了目标节点的时候不能再获取到事件

{

_this.releaseCapture();

}

removeEvent(document,"mousemove",move);

removeEvent(document,"mouseup",up);

}

});

}

return this;

});

//base.js

var $=function(_this)//调用,把this传递过来

{

return new Base(_this);

};

//对象式

function Base(_this)

{

//创建一个数组来获取节点和节点的数组

this.elements=[];//私有化,不共用

if(_this!=undefined)//这里的_this是一个对象,undefined也是个对象,却别typeof放回的带单引号的 “undefined”

{

this.elements[0]=_this; //把this放到数组的第一个

}

}

//获取ID节点

Base.prototype.getId=function(id)

{

this.elements.push(document.getElementById(id));

return this;

};

//获取元素节点

Base.prototype.getTagName=function(tag)

{

var tags=document.getElementsByTagName(tag);

for(var i=0;i<tags.length;i++)

{

this.elements.push(tags[i]);

}

return this;

};

//class获取

Base.prototype.getClass=function(className)

{

var all=document.getElementsByTagName("*");

for(var i=0;i<all.length;i++)

{

if(all[i].className==className)

{

this.elements.push(all[i]);

}

}

return this;

};

//获取某个节点,并且返回Base对象

Base.prototype.eq=function(num)

{

var element=this.elements[num];

this.elements=[];//清空数组

this.elements[0]=element;//重新赋值

return this;  //返回如jq的eq()一样的东西

};

//获取某个节点,并且放回这个节点的对象

Base.prototype.get=function(num)//

{

return this.elements[num];//返回如jq的get()一样的东西

};

//设置CSS

Base.prototype.css = function (attr, value) {

for (var i = 0; i < this.elements.length; i ++) {

if (arguments.length == 1) {

return getStyle(this.elements[i], attr);//为什么这里需要return呢

}

this.elements[i].style[attr] = value;

}

return this;

};

Base.prototype.click=function(fn)

{

for(var i=0;i<this.elements.length;i++)

{

this.elements[i].onclick=fn;

}

return this;

};

//设置innerHtml 获取innerHTML

Base.prototype.html=function(value)

{

for(var i=0;i<this.elements.length;i++)

{

if(arguments.length==0)

{

return this.elements[i].innerHTML;

}

else

{

this.elements[i].innerHTML=value;

}

}

return this;

};

//添加class

Base.prototype.addClass=function(className)

{

for(var i=0;i<this.elements.length;i++)

{

if(!hasClass(this.elements[i],className))//判断是否已经有这个class

{

this.elements[i].className+=‘ ‘+className;

}

}

return this;

};

//移出class

Base.prototype.removeClass=function(className) //调用方法$().getClass("dd").addClass("a").addClass("b").removeClass("b");

{

for(var i=0;i<this.elements.length;i++)

{

if(hasClass(this.elements[i],className))//判断是否已经有这个class

{

this.elements[i].className=this.elements[i].className.replace(new RegExp(‘(\\s|^)‘+className+‘(\\s|$)‘),‘‘);

}

}

return this;

};

//添加link或style的css规则,不常用

Base.prototype.addRule=function(num,selectorText,cssText,position) //调用方法, $().addRule(0,"body","background:red",0)

{

var sheet=document.styleSheets[num];

if(typeof sheet.insertRule!="undefined")//w3c

{

sheet.insertRule(selectorText+"{"+cssText+"}",position);

}

else if(typeof  sheet.addRule!="undefined")//iE

{

sheet.addRule(selectorText,cssText,position);//sheet.addRule("body","background:red",)

}

};

//移除link或style的css规则,不常用

Base.prototype.addRule=function(num,index) //调用方法,  $().removeRule(0);

{

var sheet=document.styleSheets[num];

if(typeof sheet.deleteRule!="undefined")//w3c

{

sheet.deleteRule(index);

}

else if(typeof  sheet.removeRule!="undefined")//iE

{

sheet.removeRule(index);//sheet.addRule("body","background:red",)

}

};

//设置hover方法

Base.prototype.hover=function(over,out)

{

for(var i=0;i<this.elements.length;i++)

{

//  this.elements[i].onmouseover=over;

// this.elements[i].onmouseout=out;

addEvent(this.elements[i],"mouseover",over);

addEvent(this.elements[i],"mouseout",out)

}

return this;

};

//添加show

Base.prototype.show=function()

{

for(var i=0;i<this.elements.length;i++)

{

this.elements[i].style.display="block"

}

return this;

};

//添加hide

Base.prototype.hide=function()

{

for(var i=0;i<this.elements.length;i++)

{

this.elements[i].style.display="none"

}

return this;

};

//设置物体居中

Base.prototype.center=function(width,height)

{

var top=(getInner().height-width)/2;

var left=(getInner().width-height)/2;

for(var i=0;i<this.elements.length;i++)

{

this.elements[i].style.top=top+"px";

this.elements[i].style.left=left+"px";

}

return this;

};

//触发浏览器窗口事件

Base.prototype.resize = function (fn) {

for(var i=0;i<this.elements.length;i++)

{

var element=this.elements[i];

/* window.onresize=function()

{

fn();

if (element.offsetLeft > getInner().width - element.offsetWidth) {

element.style.left = getInner().width - element.offsetWidth + ‘px‘;

}

if (element.offsetTop > getInner().height - element.offsetHeight) {

element.style.top = getInner().height - element.offsetHeight + ‘px‘;

}

}*/

addEvent(window,"resize",function()

{

fn();

if (element.offsetLeft > getInner().width - element.offsetWidth) {

element.style.left = getInner().width - element.offsetWidth + ‘px‘;

}

if (element.offsetTop > getInner().height - element.offsetHeight) {

element.style.top = getInner().height - element.offsetHeight + ‘px‘;

}

})

}

return this;

};

//锁屏功能

Base.prototype.lock=function()

{

for(var i=0;i<this.elements.length;i++)

{

this.elements[i].style.width=getInner().width+"px";

this.elements[i].style.height=getInner().height+"px";

this.elements[i].style.display="block";

document.documentElement.style.overflow = ‘hidden‘;

addEvent(window,"scroll",scrollTop);

}

return this;

};

function scrollTop(){

document.documentElement.scrollTop=0;// IE W3C

document.body.scrollTop=0;//火狐

}

Base.prototype.unlock=function()

{

for(var i=0;i<this.elements.length;i++)

{

this.elements[i].style.display="none";

document.documentElement.style.overflow = ‘auto‘;

removeEvent(window,"scroll",scrollTop);

}

return this;

};

//插件入口

Base.prototype.extend=function(name,fn)

{

Base.prototype[name]=fn;

};

/*$().extend("bbb",function(){  //调用方法

alert("123")

});*/

时间: 2024-11-16 03:21:24

103 extend 插件入口 jquery eq 和get的封装 拖拽插件的相关文章

JQuery之拖拽插件

一直以来,都对JS获取元素的位置感到非常的困惑:一会client.一会offset.一会scroll. 再加上各大浏览器之间的不兼容,唉,搞得哥晕晕乎乎的. 而很多页面效果都要用到这些位置.不得已,得练练,得记记. 下面就来说说这个基于 JQuery的简易拖拽插件吧. 按惯例,先说说拖拽的原理,以及搞这么一个东东的步骤: 那什么是拖拽呢? 看名字就知道了:就是把一个东东拖来拽去的. 放到我们的DOM上,就是改变它的位置. 它只有两个难点:1.如何知道是在拖? 2.如何知道从哪拖,拖到哪? 其实,

jQuery拖拽插件制作拖拽排序特效

基于jQuery拖拽插件制作拖拽排序特效是一款非常实用的鼠标拖拽布局插件.效果图如下: 在线预览   源码下载 实现的代码. html代码: <h1>水平拖拽</h1> <div class="demo"> <div class="item item1"><span>1</span></div> <div class="item item2"><

jquery拖拽插件Easydrag

在一些有弹出框的页面,会经常用到拖拽效果来增加用户体验,避免因弹出框遮挡一些元素.如果用原生的js来写的话,js兼容性很不好控制,经常由于浏览器事件的不统一而影响效果,今天给大家介绍一个拖拽插件easydrag,EasyDrag可以指定可拖动的区域,一个setHandler搞定,不错开源是个好东西,只需要一行代码便可轻松在主流浏览器上 使用方法示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q

一步一步实现JS拖拽插件

js拖拽是常见的网页效果,本文将从零开始实现一个简单的js插件. 一.js拖拽插件的原理 常见的拖拽操作是什么样的呢?整过过程大概有下面几个步骤: 1.用鼠标点击被拖拽的元素 2.按住鼠标不放,移动鼠标 3.拖拽元素到一定位置,放开鼠标 这里的过程涉及到三个dom事件:onmousedown,onmousemove,onmouseup.所以拖拽的基本思路就是: 1.用鼠标点击被拖拽的元素触发onmousedown (1)设置当前元素的可拖拽为true,表示可以拖拽 (2)记录当前鼠标的坐标x,y

vue拖拽插件(弹框拖拽)

// =======拖拽 插件 cnpm install vuedraggableimport draggable from 'vuedraggable' <draggable v-model="tags" :move="getdata" @update="datadragEnd"> <transition-group> <div class="testdiv" v-for="eleme

自己写一个jqery的拖拽插件

说实话,jQuery比原生的js好用多了,本来想用原生写的,也写出来的,只是,感觉不像插件,所以用jQuery实现了一版. 实现的功能:可以指定拖拽的边界,在拖拽过程中,可以触发几个自定义事件 先说明一下我写的插件的原则: 1.常量分离出来,放在$.zUI.插件中 2.插件的主体执行函数命名为$.zUI.插件.fn 3.销毁函数命名为$.zUI.插件.unfn 这些规范,主要是为了以后写其他插件时,放在一起,精简代码用的,以后可能还会增加其他规则,以写出一个骨架来. 拖拽的原理其实比较简单,就是

拖拽插件SortableJS

在项目中,经常会遇到一些涉及到拖拽的需求,github上面有一个开源的SortableJS的插件,支持Vue,React,Angular等多种框架,实现效果很好,基本可以满足大部分的需求,下面就第一次在jquery中的使用做个简单的demo记录. 引入文件Sortable.min.js 指定包裹容器的id 根据api开始创建使用即可 <!DOCTYPE html> <html> <head> <meta charset="utf-8" />

利用jQuery UI为CMS网站实现拖拽布局效果,秒杀table布局

1 实现效果 对于使用过CMS系统制作网站的人应该都清楚,制作网站过程有一个重要的步骤就是制作页面布局.目前,实现页面布局有两种方式:table与div.这两种方式各有其优劣之处. Table: 优势:使用简单,使用表格进行布局顺理成章,概念和效果图理解起来很简单,制作也方便. 劣势:表格布局比较固定,布局效果控制的比较死,一些较为特殊的效果.层叠效果等比较难以实现. Div: 优势:布局效果灵活,div能轻易的控制布局位置,浮动效果等. 劣势:操作较为复杂,需要前端布局设计人员对div的特性.

jquery插件之拖拽

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽效果,您可以根据自己的实际需求来设置被拖拽元素是否可以被拖拽至可视区域以外.整体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d