JQuery绑定及效果

文章目录

  • JQuery绑定及效果
    • 一、JQuery的四种事件绑定
      • 1.bind(type,[data],function(eventObject))
      • 2.live(type, [data], fn)
      • 3.delegate
      • 4.on
    • 二、this
      • 1.获取元素的索引值
      • 2.this和$(this)
      • 3.jQuery中this与$(this)的区别
    • 三、效果
      • 1.隐藏和显示
      • 2.淡入淡出
      • 3.jQuery 滑动方法
      • 4.jQuery 动画 - animate() 方法
      • 5.jQuery stop()
      • 6.chaining

一、JQuery的四种事件绑定

jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码。下面我们来看下jQuery中绑定事件的方式都有哪些。

jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是unbind、die、undelegate、off。

1.bind(type,[data],function(eventObject))

  • bind是使用频率较高的一种,作用就是在选择到的元素上绑定特定事件类型的监听函数,参数的含义如下:
  • type:事件类型,如click、change、mouseover等;
  • data:传入监听函数的参数,通过event.data取到。可选;
  • function:监听函数,可传入event对象,这里的event是jQuery封装的event对象,与原生的event对象有区别,使用时需要注意
  • bind的源码:
 bind: function( types, data, fn ) {return this.on( types, null, data, fn );}$('#myol li').bind('click',getHtml);
  • bind的特点就是会把监听器绑定到目标元素上,有一个绑一个,在页面上的元素不会动态添加的时候使用它没什么问题。
  • 但如果列表中动态增加一个“列表元素”,点击它是没有反应的,必须再bind一次才行。 要想不这么麻烦,我们可以使用live。
  • jQuery还有一种事件绑定的简写方式a.click(function(){});a.change(function(){});等,它们的作用与bind一样,仅仅是简写而已。

2.live(type, [data], fn)

  • live的参数和bind一样,它又有什么蹊跷呢,我们还是先瞄一眼源码:
live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn );return this;}
  • 可以看到**live方法并没有将监听器绑定到自己(this)身上,而是绑定到了this.context上了**。这个context是什么东西呢?其实就是元素的限定范围,看了下面的代码就清楚了:
$('#myol li').context; //document$('#myol li','#myol').context; //document$('#myol li',$('#myol')[0]); //ol
  • 通常情况下,我们都不会像第三种方式那样使用选择器,所以也就认为这个context通常就是document了,即live方法把监听器绑定到了document上了。
  • 不把监听器直接绑定在元素上,你是不是想起事件委托机制来了呢?
  • live正是利用了事件委托机制来 完成事件的监听处理,把节点的处理委托给了document。在
  • 监听函数中,我们可以用event.currentTarget来获取到当前捕捉到事件的 节点。下面的例子来揭晓:
$('#myol li').live('click',getHtml);

3.delegate

  • live存在那样的缺点,所以我们就思考,既然老爷子负担那么重,可不可以别把监听器绑定在document上呢,
  • 绑定在就近的父级元素上不就好了。顺应正常逻辑,delegate破壳而出
  • 参数多了一个selector,用来指定触发事件的目标元素,监听器将被绑定在调用此方法的元素上。看看源码:
delegate: function( selector, types, data, fn ) {return this.on( types, selector, data, fn );}
  • 又是调用了on,并且把selector传给了on。看来这个on真的是举足轻重的东西。照样先不管它。

看看示例先:

$('#myol').delegate('li','click',getHtml);

4.on

看了这么多,你是不是迫不及待想看看这个on的真实面目了呢,这就来:

on(type,[selector],[data],fn)
  • 参数与delegate差不多但还是有细微的差别,首先type与selector换位置了
  • 其次selector变为了可选项。交换位置的原因不好查证,应该是为了让视觉上更舒服一些吧。

我们先不传selector来看一个例子:

$('#myol li').on('click',getHtml);
  • 可以看到event.currentTarget是li自己,与bind的效果一样。至于传selector进去,就是跟delegate一样的意义了,除了参数顺序不同,其他完全一样。
  • 终于看到on的真实作用了,那么,这么多的事件绑定方式,我们该如何进行选择呢?
  • 其实这个问题是完全不必纠结的,因为你已经知道他们之间的区别了不是么?根据实际情况斟酌使用就行。
  • 不过官方有一个推荐就是尽量使用on,因为其他 方法都是内部调用on来完成的,直接使用on可以提高效率,而且你完全可以用on来代替其他三种写法
  • 至于如何代替我想就不必这么直白的写出来了,真正理 解它们的区别之后自然而然也就不是难事了
//给元素绑定click事件,可以用如下方法:
$('#btn1').click(function(){// 内部的this指的是原生对象// 使用jquery对象用 $(this)})

二、this

1.获取元素的索引值

有时候需要获得匹配元素相对于其同胞元素的索引位置,此时可以用index()方法获取

var $li = $('.list li').eq(1);
alert($li.index()); // 弹出1
......
<ul class="list"><li>1</li><li>2</li><li>4</li><li>5</li><li>6</li>
</ul>

2.this和$(this)

当你用的是jquery时,就用$(this),如果是JS,就用this

$(this).html( $(this).html() + " BAM! ");
  • 这个里的html()是JQUERY方法,用$(this).html()
  • 当然,JS里也有相似方法innerHTML,如果用innerHTML,就要这样写了,这里的reset是JS方法,所以同上得用this.reset():
 1 this.innerHTML(); 2 this.reset();
  • jquery对象$ (this)[0]等同于JS里的元素this,这里的this是一样的
  • JS里的元素只要包上$()就是jquery对象了,而jquery的对象只要加上[0]或者.get(0),就是js元素了
  • $(this)是jquery对象,this就是简单指当前元素。
  • jquery对象不能直接指定元素的属性(ele.style),需要get(index)或者直接(index)取得对象中元素才行
  • JQuery中的 $() 这个符号,实际上这个符号在JQuery中相当于JQuery(),即:
 $(this)=jquery(this);
  • 也就是说,这样可以返回一个jquery对象。那么,当你在网页中alert($('#id'));时,会弹出一个[object Object ],这个object对象,也就是jquery对象了。
  • 那么,我们再回过头来说$(this),这个this是什么呢?假设我们有如下的代码:
$("#desktop a img").each(function(index){alert($(this));alert(this);
}

那么,这时候可以看出来:

alert($(this)); //弹出的结果是[object Object ]alert(this); //弹出来的是[object HTMLImageElement]

3.jQuery中this与$(this)的区别

   $("#textbox").hover(   function() {   this.title = "Test";   },   fucntion() {   this.title = "OK”;   }
);
这里的this其实是一个html 元素(textbox),textbox有text属性,所以这样写是完全没有什么问题的。

但是如果将this换成(this)就不是那回事了,报Error了。this与(this)的区别在此。

\\Error Code:
$("#textbox").hover(   function() {   $(this).title = "Test";   },   function() {   $(this).title = "OK";   }
);
  • $()这是jQuery的一个函数,也是最核心最基本的函数
  • 功能一:传入一个选择器字符串,获得这个选择器对应的dom内容,保存在[]中,也就是俗称的jQuery对象。例如
('#id')(‘.class’) $(‘tag’)
  • 功能二:传入一个匿名函数 ,例如
$(function(){})//这个匿名函数在网页载入完成后开始执行
  • 功能三:将JavaScript对象包装成为jQuery对象。例如
$(this)
$({a:1,b:2,c:3})
$(document.getElementById('idstr'))
  • this是javascript自身的语法关键字,它指向一个javascript对象,所以可以使用所指向的目标javascript对象所拥有的方法,但他自己不是一个普通的变量,所以你无法自己定义一个变量叫this
  • 所以为了使用jQuery对象的方法,你必须传入jQuery函数$(this), 将javascript 对象包装成为一个jquery对象
  • 这里的$(this)是一个JQuery对象,而jQuery对象沒有title 属性,因此这样写是错误的
  • JQuery拥有attr()方法可以get/set DOM对象的属性,所以正确的写法应该是这样:

正确的代码:

$("#textbox").hover(   function() {   $(this).attr(’title’, ‘Test’);   },   function() {   $(this).attr(’title’, ‘OK’);   }
);
  • 使用jQuery的好处是它包裝了各种浏览器版本对DOM对象的操作,因此统一使用$(this)而不再用this应该是比较不错的选择。

典型错误与注意点

var node = $('#id');
node.click(function(){this.css('display','block');//报错  this是一个html元素,不是jquery对象,//因此this不能调用jquery                             的css()方法
  $(this).css();//正确,$(this)是一个jquery对象,不是html元素,//可以用css()方法this.style.display = 'block';  //正确  this是一个html元素,//不是jquery对象,因此this不能调用jquery的css()方法,//但是可以用javascript来更改style属性});

不要滥用$(this)
如果不了解javasrcipt中基本的DOM属性和方法的话,很容易滥用jQuery对象。比如:

$(‘#someAnchor’).click(function() {alert( $(this).attr(‘id’) );});

如果你只是通过jQ对象获取简单的dom元素的属性比如id,那么你完全可以使用js原生的方法:

$(‘#someAnchor’).click(function() {alert( this.id );});

诸如“src,” “href,” 和“style.”等一些属性在老版本的ie中使用了getAttribute方法。

三、效果

1.隐藏和显示

  • hide()隐藏元素
hidden(speed,callback);
//说明:相反与show方法,用于隐藏元素,参数与show相同,请参考3.1
//下面的例子是点击一个按钮,隐藏显示的div
//代码如下:var callback=function(){ //alert("我是回调函数");
}
var f1=function(){// $("#t1").hide(); 参数缺省
// $("#t1").hide("fast",callback); 显示速度为fast方式
$("#t1").hide(3000,callback);//自定义显示速度 3000毫秒
}; $("#b1").click(f1);
  • show() 显示元素
show(speed,callback);
//说明:这个方法可以显示隐藏的元素,其中参数也缺省,即写成show()这种形式
//speed ---指定显示的速度 有3个参数可以选择 slow ,normal,fast,
//也可以自己指定数字(单位:毫秒)
//callback---回调函数
//下面是一个简单的例子var callback=function(){ //alert("我是回调函数");
}
var f1=function(){// $("#t1").show(); 参数缺省
// $("#t1").show("fast",callback); 显示速度为fast方式
$("#t1").show(3000,callback);//自定义显示速度 3000毫秒
};
$("#b1").click(f1);
  • toggle() 显示隐藏的元素,隐藏显示的元素
toggle(speed,callback)
//说明:这个可以理解为show()与hide()方法的结合体,轮换执行show()与hide()
//比如:页面有一个隐藏的元素,第一次执行toggle(),显示元素,
//第二次执行,隐藏元素,第三次则又显示元素。。。
代码如下:var callback=function(){ //alert("我是回调函数");
}
var f1=function(){//$("#t1").toggle(); // 参数缺省
//$("#t1").toggle("fast",callback); //显示速度为fast方式
$("#t1").toggle(3000,callback);
};
$("#b1").click(f1);

2.淡入淡出

  • fadeIn()淡入已隐藏的函数
$(selector).fadeIn(speed,callback);
  • 可选的 speed 参数规定效果的时长。它可以取以下值:“slow”、“fast” 或毫秒。
  • 可选的 callback 参数是 fading 完成后所执行的函数名称。
  • ​ fadeOut()方法淡出可见的元素
$(selector).fadeOut(speed,callback);
  • 可选的 speed 参数规定效果的时长。它可以取以下值:“slow”、“fast” 或毫秒
  • 可选的 callback 参数是 fading 完成后所执行的函数名称。
  • ​ fadeToggle()可以再fadeIn()和fadeOut()方法之间进行切换。
$(selector).fadeToggle(speed,callback);
  • 可选的 speed 参数规定效果的时长。它可以取以下值:“slow”、“fast” 或毫秒。
  • 可选的 callback 参数是 fading 完成后所执行的函数名称。
  • ​ fadeTo() 方法允许渐变为给定的不透明度(值介于 0 与 1 之间)
$(selector).fadeTo(speed,opacity,callback);
  • fadeTo() 方法中必需的 opacity 参数将淡入淡出效果设置为给定的不透明度(值介于 0 与 1 之间)。
  • 可选的 callback 参数是该函数完成后所执行的函数名称。

3.jQuery 滑动方法

  • slideDown() 向下滑动元素
slideDown(speed,[callback]);
//说明:改变对象的height以实现向下展开的动画效果,常用与显示隐藏的元素
//代码如下:var callback=function(){ //alert("我是回调函数"); }
var f1=function(){//$("#t1").slideDown(); // 参数缺省
//$("#t1").slideDown("fast",callback); //显示速度为fast方式
$("#t1").slideDown(1000,callback);
};
$("#b1").click(f1);
  • slideUp() 向上滑动元素
slideUp(speed,[callback]););//说明:改变对象的height以实现向上展开的动画效果,常用隐藏显示的元素
//代码如下:var callback=function(){//alert("我是回调函数");
}
var f1=function(){//$("#t1").slideUp();
// 参数缺省 //$("#t1").slideUp("fast",callback); //显示速度为fast方式
$("#t1").slideUp(1000,callback);
};
$("#b1").click(f1);
<input type="button" value="show" id="b1"/> <div id="t1" style="border: 1px solid gray;">dd</div>
  • slideToggle() 可以再slideDown ()和slideUp之间切换。

4.jQuery 动画 - animate() 方法

自定义动画使用方法:$(selector).animate({params},speed,callback);
参数说明:

  • params—一组包含作为动画属性和最终值哦样式属性和其值的集合
  • speed----可选的 speed 参数规定效果的时长。它可以取以下值:“slow”、“fast” 或毫秒。
  • callback—回调函数,是动画完成后所执行的函数名称。

注意:params的样式属性必须书写成驼峰形式,即比如margin-left应该些微
marginLeft的形式

代码如下:


var callback=function(){//alert("我是回调函数");
} ;
var par={ height:"70%" };
var f1=function(){$("#t1").animate(par,1000,callback);
};$("#b1").click(f1);

5.jQuery stop()

方法用于在动画或效果完成前对它们进行停止。

6.chaining

名为链接(chaining)的技术,允许我们在相同的元素上运行多条 jQuery 命令,一条接着另一条

JQuery绑定及效果相关推荐

  1. jQuery中事件及常用事件总结、jQuery中常见效果、隐式迭代、链式编程、样式操作、动画队列、不同元素绑定同一个事件

    jQuery事件: jQuery中的事件和javascript中的事件基本相似,不同的是jQuery中的事件处理函数写在事件后面的括号中,如: <script>$('input').cli ...

  2. jquery div拖动效果示例代码

    jquery div拖动效果示例代码 div拖动效果想必大家都有见到过吧,实现的方法也是有很多的,下面为大家将介绍使用jquery是如何实现的,感兴趣的朋友不要错过 复制代码代码如下: <%@ ...

  3. jQuery - fadeIn淡入效果

    jQuery - fadeIn淡入效果 [示例代码] <html>     <head>         <script src="jquery-1.3.1.j ...

  4. 使用jQuery制作手风琴效果.(转)

    http://www.cssrain.cn/article.asp?id=1369 使用jQuery制作手风琴效果 本例主要讲解如何利用jQuery创建一个简单的手风琴风格的竖向菜单,从易到难. 第一 ...

  5. jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。

    jQuery  Easing 是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动.幻灯片切换等场景应用比较多.它非常小巧,且有多种动画方案供选择,使用简单,而且免费. 引入Eas ...

  6. jQuery 图片滚动效果

    2019独角兽企业重金招聘Python工程师标准>>> 使用了网上的一个JS插件,配置起来相当灵活好用,效果如下: 下面整理下使用的过程: 1.在插件网站http://www.gma ...

  7. 第一百七十二节,jQuery,动画效果

    jQuery,动画效果 学习要点: 1.显示.隐藏 2.滑动.卷动 3.淡入.淡出 4.自定义动画 5.列队动画方法 6.动画相关方法 7.动画全局属性 一.显示.隐藏 jQuery 中显示方法为:. ...

  8. updatepanel失效怎么办_【点滴积累】解决jQuery绑定事件在updatepanel更新后失效的方法...

    背景 接到了领导给的一个New Feature,为系统的菜单导航栏进行一些个性化的操作(鼠标移到导航菜单时下方出现子菜单,移到其他的菜单选项时显示该选项的子菜单,隐藏其他子菜单.其次就是当使用鼠标点击 ...

  9. JQuery实现广告效果(滚动切换)

    JQuery实现广告效果(滚动切换) Html+css 效果如上图 代码: Java代码   <!DOCTYPE html> <html> <head lang=&quo ...

最新文章

  1. sql server两种分页方法
  2. Spring+Quartz实现定时执行任务的配置
  3. 理解Object.defineProperty的作用
  4. python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...
  5. 掘金浏览器插件安装图文教程
  6. gpl2 gpl3区别_GPL的下降?
  7. 那年学过的Java笔记三核心类库一
  8. 学习笔记: ES7(ES2016)新功能
  9. ks.cfg配置详解
  10. 知网文档下载中的CAJ和PDF有什么区别?
  11. QTreeView 和QTreeWidget
  12. 2022搜狐校园NLP算法大赛情感分析第一名方案理解和复现
  13. uniapp打包app教程
  14. 再谈宋星博客的留言与seo培训联盟
  15. android调用系统裁剪图片 返回模糊 不清晰的问题
  16. 评《设计模式之禅》一书
  17. 学习java框架-J2EE体系-Spring-IOC-AOP-Bean-事务-
  18. 4K、2K、1080p、720p、480p、240p常见视频清晰度
  19. 硅谷高管中国行感受:思维太单一,996式加班意义不大
  20. 基于深度学习的聊天机器人

热门文章

  1. error:cannot load driver JL2CM3.dll
  2. Shiro使用redis作为缓存(解决shiro频繁访问Redis)
  3. 网络排错模型之我见----模型,基线,协议,数据包
  4. UVA 103 Stacking Boxes
  5. 我的WCF之旅(13):创建基于MSMQ的Responsive Service
  6. Linux系统检测工具 三(Free,Top,ps,Vmstat,Sysstat)
  7. CodeForces - 1102F Elongated Matrix(哈密顿路径+状压dp)
  8. POJ - 1284 Primitive Roots(原根+欧拉函数)
  9. HDU - 2732 Leapin' Lizards(最大流+思维建边)
  10. CH - 0304 IncDec Sequence(差分+思维)