jQuery绑定事件及动画效果

绑定事件

语法:jQuery对象.bind(“事件名”,可选参数,事件处理函数);
tip:1.第二个参数是可选参数,作为event.data属性值传递给事件对象的额外数据对象。
2.事件名不要加on,如单击事件是click,不是onclick

示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>演示事件</title>
        <style type="text/css">
            * {
                margin: 0px;
                padding: 0px;
            }

            body {
                font-size: 13px;
                line-height: 130%;
                padding: 60px;
            }

            #panel {
                width: 300px;
                border: 1px solid #0050D0;
            }

            .head {
                padding: 5px;
                background: #96E555;
                cursor: pointer;
            }

            .content {
                padding: 10px;
                text-indent: 2em;
                border-top: 1px solid #0050D0;
                display: none;

            }
        </style>
        <script src="../../jsjava库/jquery-2.1.4.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $(function() {
                //需求: 点击标题后 显示 标题下面的div
                $("#panel h5.head").bind("click",function(){

                    //让标题下面的div显示
                    $(this).next().show(5000);
                    //show("fast") 0.2s;show("normal") 0.4s; show("slow") 0.6s;没有参数没有动画效果,直接显示
                });

                //取消事件
                $("#panel h5.head").unbind("click");
            });
        </script>
    </head>

    <body>

        <div id="panel">
            <h5 class="head">什么是jQuery?</h5>
            <div class="content">
                jQuery是继Prototype之后又一个优秀的JavaScript库,它是一个由 John Resig 创建于2006年1月的开源项目。jQuery凭借简洁的语法和跨平台的兼容性,极大地简化了JavaScript开发人员遍历HTML文档、操作DOM、处理事件、执行动画和开发Ajax。它独特而又优雅的代码风格改变了JavaScript程序员的设计思路和编写程序的方式。
            </div>
        </div>
    </body>

</html>

取消绑定

语法:jQuery对象.unbind(“click”); 或 jQuery对象.unbind(“click”,函数名) jQuery对象可以绑定多个事件,第二个可以指定函数名字取消绑定。

js代码:
$(function () {
                //可以绑定多个事件
                $("#btn1").bind("click",f1 = function () {
                    alert('111');
                }).bind("click",function () {
                    alert(222);
                });

                //只执行一次
                $("a").one("mouseover",function () {
                    alert("第一次移入有此效果,之后不再有");
                });

                //打开网页执行,不加#,每次都加载当前网页,只执行一次的事件执行了多次,
                //加#后,虽然网页内内容不改变,但相当于跳转到了另一个网页,上面事件只执行一次
//              $("a").trigger("click");

                $("#btn2").bind("click",function () {
                    //取消绑定可以指定函数名
                    $("#btn1").unbind("click",f1);
                });

                $("#btn3").bind("click",function () {
//                  alert($(this).next());
//                  $(this).next().show(3000);
                    if($("#div1").is(":visible")){
                        $(this).next().hide(3000);
                    }else{
                        $("#div1").show(3000);
                    }
                });

            });
css代码:
<style type="text/css">
            #div1{
                width:200px;
                height:200px;
                background-color: yellow;
                display:none;
                /*visibility: hidden;*/
            }
        </style>

html代码:
<input type="button" name="btn1" id="btn1" value="点我" />
        <input type="button" name="btn2" id="btn2" value="移除事件,取消绑定" />
        <a href="#">超链接</a>
        <input type="button" name="btn3" id="btn3" value="显示" /><div id="div1" >我是div1</div>

只执行一次事件

语法:如上例, 对象.one(“事件名”,事件处理函数);

触发某一事件

语法:对象.trigger(“click”); 相当于自动执行对象.click();

div的显示和隐藏

显示:div.show(“slow”) //0.6s ;”normal”是0.4s,“fast”是 0.2s。也可以传入毫秒数作为参数。显示的方式是从左到右,从上到下依次增大(展开)。
隐藏:div.hide(),可以传入动画完成的时间:毫秒数

改变绑定事件的类型

可以级联绑定mouseover 和 mouseout 事件。
示例:

<script type="text/javascript">
            $(function() {
                $("#panel").bind("mouseover",function () {
                    $(this).find("div.content").show();
                }).bind("mouseout",function () {
                    $(this).find("div.content").hide();
                });
            });
        </script>

两个合成事件

一、hover( )方法
hover(enter,leave);相当于两个函数,第一个是移入,第二个是移出。
示例:

<script type="text/javascript">
            $(function() {
                $("#panel").hover(function () {
                    $(this).find("div.content").show();
                },function () {
                    $(this).find("div.content").hide();
                });
            });
        </script>

二、toggle( )方法
toggle(开,关)类似于开关,对单击事件合成,1.9以后废弃,对div的toggle(),目前版本也支持,例:$div.toggle();//点一下显示或隐藏

$(function() {
                //加强效果,高亮显示
                //需求: 点击标题后 显示 标题下面的div
                $("#panel").click(function() {

                    $(this).find("div.content").toggle();

                    $(this).find("h5").toggleClass("highlight");
                });

                //1.9以后废弃
//              $("#panel h5.head").toggle(function(){
//                  //让层显示
//                  $(this).next().show();
//              },function(){
//                  //让层隐藏
//                  $(this).next().hide();
//              });
            });

动画

(1)内置动画

1)show() 和 hide()

<script type="text/javascript">
            $(function() {
                $("#panel").hover(function () {
                    $(this).find("div.content").show();
                },function () {
                    $(this).find("div.content").hide();
                });
            });
        </script>

2)fadeIn() 和 fadeOut() 淡入淡出效果

<script type="text/javascript">
            $(function() {
                $("#panel").hover(function () {
                    $(this).find("div.content").fadeIn(2000);
                },function () {
                    $(this).find("div.content").fadeOut(2000);
                });
            });
        </script>

3)slideUp() 和 slideDown()收缩、展开效果

<script type="text/javascript">
            $(function() {
                //动画积累,动画中的效果叠加
                var $div = $("div.content");
                if(!$div.is(":animated")){//div不处于动画状态
                    $("#panel").hover(function () {
                        $(this).find("div.content").slideDown(3000);
                    },function () {
                        $(this).find("div.content").slideUp(3000);
                    });
                }

            });

动画积累:当前动画过程中触发事件,进行其他动画,效果叠加,可以加条件:if(!$div.is(“:animated”)) ,判断div是否处于动画效果,不处于动画效果,可以显示和隐藏。

(2)自定义动画

1.自定义简单动画

animate({left:"500px"},3000,function(){alert(3);});  

参数1:让div向右移动500px
参数2:移动所需的时间(可以省略)
参数3:  移动完成调用回调函数(可以省略)

完整演示代码如下:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>演示事件</title>
        <style type="text/css">
            #panel {
                width:100px;
                height:100px;
                background-color:yellowgreen;
                position:relative;
                cursor:pointer;
            }
        </style>
        <script src="../../../js/jquery/jquery-1.7.2.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $(function() {
                $("#panel").click(function(){
                    $(this).animate({left:"500px"},3000,function(){
                        $(this).fadeOut(2000);
                    });
                });
            });
        </script>
    </head>

    <body>

        <div id="panel">
            保存成功
        </div>
    </body>

</html>

2.多重动画



(1)同时执行多个动画

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>演示事件</title>
        <style type="text/css">
            * {
                margin: 0px;
                padding: 0px;
            }

            #img1 {
                position:relative;
            }

        </style>
        <script src="../../../js/jquery-3.1.0.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $(function() {
                $("#img1").click(function(){
                    $(this).animate({left:"500px",height:"200px"},3000);
                });
            });
        </script>
    </head>

    <body>

        <img id="img1" src="../../../image/smile.png"/>
    </body>

</html>

(2)按顺序执行多个动画

上例中是移动和调整宽度同时进行,如果想按顺序执行动画,例如先向右滑动,然后再放大它的高度,只需把代码拆开

$(function() {
                $("#img1").click(function(){
                    $(this).animate({left:"500px"},3000);
                    $(this).animate({width:"200px"},3000);
                });
});

因为animate都是对同一个jQuery对象操作的,也可以改为链式操作

$(function() {
                $("#img1").click(function(){
                    $(this).animate({left:"500px"},3000).
                             animate({width:"200px"},3000);

                });
});

像这样动画效果的执行具有先后顺序,称为”动画队列”.
3.综合动画
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>演示事件</title>
        <style type="text/css">
            * {
                margin: 0px;
                padding: 0px;
            }

            #panel {
                width:100px;
                height:100px;
                background-color: burlywood;
                position:relative;
            }
        </style>
        <script src="../../../js/jquery/jquery-1.7.2.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            $(function() {

                $("#panel").css("opacity","0.5");//设置不透明度
                $("#panel").click(function(){
                    $("#panel").animate({left:"400px",height:"200px",opacity:"1"},3000)
                        .animate({top:"200px",width:"200px"},3000)
                        .fadeOut("slow");
                });
            });
        </script>
    </head>

    <body>

        <div id="panel">

        </div>
    </body>

</html>

4.动画回调函数
如果想在最后一步切换元素的CSS样式,而不是隐藏元素.
需要把最后fadeOut(“slow”) 改为 .css("border","5px solid blue");
但是这样并不能得到预期效果,预期效果是在动画的最后一步改变元素的样式,而实际效果是刚开始执行的时候,css()方法就执行了.出现这个问题的原因是css()方法并不会加入到动画队列中,而是立即执行.可以使用回调函数(callback)对非动画方法实现排队.只要把css()方法写在最后一个动画的回调函数里即可.代码如下:
$(function() {

                $("#panel").css("opacity","0.5");//设置不透明度
                $("#panel").click(function(){
                    $("#panel").animate({left:"400px",height:"200px",opacity:"1"},3000)
                        .animate({top:"200px",width:"200px"},3000,function(){
                            $("#panel").css("border","5px solid blue");
                        });

                });
});

5.停止动画
$("#btn1").click(function(){
                    $("#panel").stop();//只能停止一个动画
});

6.延迟动画

$(function() {

                $("#panel").css("opacity","0.5");//设置不透明度
                $("#panel").click(function(){
                    $("#panel").animate({left:"400px",height:"200px",opacity:"1"},3000)
                        .delay(3000)
                        .animate({top:"200px",width:"200px"},3000,function(){
                            $("#panel").css("border","5px solid blue");
                        });

                });

                //停止动画
                $("#btn1").click(function(){
                    $("#panel").stop();
                });
            });
(3)其它动画方法

toggle()、slideToggle()、fadeTo()和fadeToToggle();

fadeTo() 把元素的不透明度调整到指定的值

$(function() {
                //需求: 点击标题后 显示 标题下面的div
                $("#panel h5.head").click(function(){
                    $(this).next().fadeTo(600,0.2);//600毫秒  不透明度调整到0.2
                });

})

在css中调整不透明度
.content {
                padding: 10px;
                text-indent: 2em;
                border-top: 1px solid #0050D0;
                background-color: rgba(255,0,0,0.5);//alpha 参数是介于 0.0(完全透明)与 1.0(完全不透明)的数字。 
}


fadeToToggle();  对应fadeIn()fadeOut()

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值