锋利的jQuery读书笔记-第4章 jQuery中的事件和动画

一、jQuery中的事件:

1.window.onload() 与$(document).ready()之间的区别

(1)执行时机上的区别:

window.onload()是网页中所有元素完全加载完之后才执行的;

$(document).ready()在DOM就绪之后就可以被调用,此时所有网页内的元素对jQuery而言都是可以访问的,但并不一定所有的关联文件下载完毕。  --使用$(document).ready()可以极大地提高Web应用的响应速度。

(2)使用次数上的区别:

window.onload()如果编写多个这样的函数,只有后面的触发,前面的不触发。这是因为JavaScript的onload事件只能保存对一个函数的引用,按照加载顺序自动用后面一个覆盖前一个,因此无法多次执行; 

$(document).ready()可以编写多个,浏览器会按照顺序加载执行。


2.$(document).ready()有两种简写方式:

(1)

$(function () {
    //alert("hello jQuery");
})
(2)

$().ready(
    function()
    {
        //alert("hello jQuery");
    }
)

3.事件绑定:bind(type, [data] , function)

jQuery的绑定事件有三个参数:

(1)事件类型:focus、load、unload、click等等

(2)可选参数,传入额外数据对象

(3)绑定对应的处理函数

写一个简单的例子,我们先写一个简单的HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery Learning </title>
</head>
<body>
        <script src ="./lib/jquery.js"> </script>
        <script src ="./JS/Chapter4.js"> </script>

        <h1>Hello Every One!</h1>

        <div id = "panel">
            <h5 class="head">什么是jQuery</h5>
            <div class = "content">
                jQuery是继Prototype之后又一个优秀的JavaScript库,它是一个由John Resig 创建于2006年1月的开源项目。
            </div>
        </div>
</body>
</html>


在定义一个对应的JQuery行为代码 Chapter4.js

$(function () {
    $(".content").hide();

    $("#panel h5.head").bind("click",function () {
        var content = $(this).next();
        if(content.is(":visible"))
        {
            content.hide();
        }
        else
        {
            content.show();
        }
    })
})

两者合并之后就可以看到一个点击隐藏/显示的jQuery事件效果

4.两个常用的行为事件函数:

(1)hover(fn1,fn2): 鼠标移入执行fn1,鼠标移除执行fn2 

(2)toggole(fn1,fn2,...) 鼠标点击一次执行fn1,点击第二次执行fn2,以此类推直到从头再来。

//改用Toggle函数实现鼠标点击后显示/隐藏事件
function titleToggle()
{
    $("#panel h5.head").toggle(function()
    {
        $(this).next().show();
    },function()
    {
        $(this).next().hide();
    })
}

//使用Hover事件实现内容的显示/隐藏
function titleHover()
{
    $("#pane2 h5.head").hover(function () {
        $(this).next().show();
    },function ()
    {
        $(this).next().hide();
    })
}


(3)结合toggle或者hover使用addClass和removeClass 来实现样式的变化。

4.事件冒泡

事件冒泡是指父子元素同时绑定一个相同的响应事件,子元素触发响应事件时,父元素也会同时触发响应事件。

看个简单的示例:

        <h1>关于冒泡事件</h1>
        <div id = "bubbleDiv">
            <span> 事件冒泡示例 </span>
        </div>
function bubbleTest()
{
    $("span").click(function()
    {
        alert("我是span响应事件");
    })

    $("div").click(function()
    {
        alert("我是Div响应事件");
    })

    $("body").click(function()
    {
        alert("我是Body响应事件");
    })
}
此时点击span,三个alert事件都会触发。 之所以叫冒泡,是因为事件会按照DOM的层次结构像水泡一样不断向上一直到最顶层。
这样一来就会带来一些预期之外的页面效果,在jQuery中针对冒泡事件有对应的处理方法:

首先引入一个概念:“事件对象”,在响应事件的时候给对应事件添加一个事件对象参数,该参数在事件结束时销毁。利用这个事件对象,我们可以进行针对一个行为进行处理。

停止事件冒泡: event.stopPropagation(); 利用事件对象,在span的click事件最后执行停止事件冒泡操作,整个事件冒泡就会终止。

还有一个简化的写法,同时用于终止事件冒泡和默认行为的执行:

    $("span").click(function()
    {
        alert("我是span响应事件");
        return false;
    })

5.移除事件

$("xxxx").unbind(); // unbind([type],[data]);  

第一个参数为需要删除的事件类型,如果不传参数则删除对应元素的全部绑定事件;

第二个参数为 绑定时传入的特定函数,那么就只有此处再传入的这个函数会被删除(有点绕,意思就是bind的时候传了一个fn,unbind的时候又传了一遍,那么就是只删这个函数事件,其他事件不影响)

jQuery特别增加了只执行一次的绑定事件函数  one(),所有用法与bind相同,这是这个函数只执行第一次后就会失效。


6.模拟操作

以上说到的都是用户实际操作的场景,但是有时候我们需要直接模拟用户的操作,那么也可以直接用jQuery来实现

(1)点击事件 :  $("xxx").triger("click");  实现模拟用户点击元素事件,简写方式:  $("xxx").click();

(2)触发自定义事件

比如元素绑定了一个行为函数   $("#btn").bind("myClick",function(){xxxxxxxxx});  模拟触发就可以使用  $("#btn").trigger("myClick");

(3)传递参数: trigger(type,[data]),  触发函数本身支持传递参数,用法与bind的传递参数相同


7.其他操作

1.绑定多个行为   bind("mouseover mouseout",function(){});  这里只需要将多个行为用空格隔开即可。

2.添加命名空间: 

$("div").bind("click.kewen",function(){xxxxxxxxxxxxx}); 

$("div").bind("mouseout.kewen",function(){xxxxxxxxxxxxx}); 

$("div").bind("xxxxxx.kewen",function(){xxxxxxxxxxxxx}); 

这个时候.kewen 这个命名空间就可以用来统一操作上述定义的所有行为,例如同时解除绑定。

 当然还可以给同一个事件添加不同的命名空间,然后按照需要执行

function nameSpaceTest()
{
    $("#bubbleSpan").bind("click",(function()
    {
        alert("我是click响应事件");
        return false;
    }))

    $("#bubbleSpan").bind("click.plugin",(function()
    {
        alert("我是click.plugin响应事件");
        return false;
    }))

    $("#nameSpaceSpan").click(function()
    {
        $("#bubbleSpan").trigger("click!");
    })
}

二、jQuery中的动画

1.animate()执行动画效果

鼠标的Hover事件,最佳实践是在animate触发之前加上stop()事件,避免反复触发时,页面显示效果比较差。

$(function(){
	  $("#panel").hover(function() {
		  $(this).stop().animate({height : "150",width : "300"} , 200 );
	  },function() {
		  $(this).stop().animate({height : "22",width : "60" } , 300 );
	  });
});

这样可以主动触发终结上一次没有执行完的函数,显示效果更佳。


如果是组合动画的animate()事件,就需要用stop(true)来清除动画队列

$(function(){
	 $("#panel").hover(function() {
				$(this).stop(true)
					.animate({height : "150" } , 200 )
					.animate({width : "300" } , 300 )
	},function() {
				$(this).stop(true)
					.animate({height : "22" } , 200 )
					.animate({width : "60" } , 300 )
	});
});

判断动画是否在执行中:
if(!$.(element).is(":animated"))
{
    // 如果某个元素没有处于动画状态中,则....
}




2.著名的toggle动画

$(function(){
    $("#panel h5.head").click(function(){
	     $(this).next().toggle();
	})
})
这个动画效果是我们最最常用的一种动画,点击某处 显示/隐藏 。


动画概括:

实际上动画只需要记清楚页面元素显示有3个重要属性: 高度(height) 宽度(width)和不透明度(opacity)

所有的动画行为只是在动态的修改某个元素的这三个属性:

hide() / show() - 同时修改高度、宽度和不透明度

fadeIn() / fadeOut() -只改变不透明度

slideUp() /slideDown() -只改变高度

fadeto() 只改变不透明度

toggle() 替换hide() 和 hide()

slideToggle() 替代slideUp()和slideDown()

fadeToggle() 替代fadeIn() 和 fadeOut()

animate()  自定义动画方法,上面的这些方法都是animate()的扩展,内部都是由animate实现,自己还可以修改其他属性样式,例如left、scrollTop等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值