美文网首页web进阶
web进阶之二十七:jquery事件

web进阶之二十七:jquery事件

作者: 甚得朕心 | 来源:发表于2018-10-08 09:30 被阅读1次

  首先列出一些关于jquery事件的函数。

blur() 元素失去焦点
focus() 元素获得焦点
change() 表单元素的值发生变化
click() 鼠标单击
dblclick() 鼠标双击
mouseover() 鼠标进入(进入子元素也触发)
mouseout() 鼠标离开(离开子元素也触发)
mouseenter() 鼠标进入(进入子元素不触发)
mouseleave() 鼠标离开(离开子元素不触发)
hover() 同时为mouseenter和mouseleave事件指定处理函数
mouseup() 松开鼠标
mousedown() 按下鼠标
mousemove() 鼠标在元素内部移动
keydown() 按下键盘
keypress() 按下键盘
keyup() 松开键盘
load() 元素加载完毕
ready() DOM加载完成
resize() 浏览器窗口的大小发生改变
scroll() 滚动条的位置发生变化
select() 用户选中文本框中的内容
submit() 用户递交表单
toggle() 根据鼠标点击的次数,依次运行多个函数
unload() 用户离开页面

鼠标移入和移出的效果

在很多情况下,我们需要在鼠标移入某个东西时,让它产生一些效果,那么用这个就正好能进解决我们的需求。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鼠标移入移出</title>
    <style type="text/css">
        .box{
            width: 200px;
            height: 200px;
            background-color: gold;
            margin: 100px auto 0;
        }
        .son{
            width: 100px;
            height: 100px;
            background-color: green;
        }
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            /*进入子元素也触发,即触发我们下面写的效果*/
                /*$('#div1').mouseover(function() {
                    $(this).animate({marginTop: 50});//.stop()
                });
                    $('#div1').mouseout(function() {
                    $(this).animate({marginTop: 100});//.stop()
                });*/

            /*进入子元素不触发*/
            /*这里加了一个stop()是在快速移动的时候不受影响*/
                /*$('#div1').mouseenter(function() {
                    $(this).stop().animate({marginTop: 50});//
                });
            $('#div1').mouseleave(function() {
                $(this).stop().animate({marginTop: 100});//
            });*/

            /*通过hover(mouseenter+mouseleave)实现简写,继续添加一个stop()*/
            $('#div1').hover(function() {
                $(this).stop().animate({marginTop: 50});
            }, function() {
                $(this).stop().animate({marginTop: 100});
            });
        })
    </script>
</head>
<body>
    <div id="div1" class="box">
        <div class="son"></div>
    </div>
</body>
</html>

input输出框,获取焦点等

  在input输入框中,会有一些操作,失去和获取焦点,判断输入框内内容是否改变等等。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>input框事件</title>
    <style type="text/css">
        
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            // //一开始就获取焦点,相当于设置了autofocus自动获取焦点了(HTML5 新增表单控件属性)
            // $('#txt01').focus();

            // //文本框获取焦点的时候(有光标闪烁的时候)
            // $('#txt01').focus(function() {
            //  alert('focus');
            // });

            // //失去焦点的时候(光标离开的时候)
            // $('#txt01').blur(function() {
            //  alert('blur');
            // });

            // //输入框内容发生变化的时候,失去焦点后触发,可用于注册时验证用户名是否已存在
            $('#txt01').change(function() {
                alert('change');
            });

            //松开键盘按键就触发
            // $('#txt01').keyup(function() {
            //  alert('keyup');
            // });
        })
    </script>
</head>
<body>
    <input type="text" id="txt01">
</body>
</html>

在上面也加了一个键盘的事件,当松开键盘的时候就触发,其中的其他和键盘相关的都类似。

关于在书写js时的方法

  在书写js的,我们要为其提供一个环境,即页面加载和渲染完成后或者当页面中所有的节点加载完成后,虽然看似差不多,但是时间上会差的。肯定是后面的快。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery其他事件</title>
    <style type="text/css">
        
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        // //JS原生写法
        // window.onload = function(){

        // }

        // //jQuery写法,等同于上面写法,时间一样
        // $(window).load(function(){

        // })

        // //ready的写法
        // $(document).ready(function(){

        // })

        // //ready的简写
        // $(function(){

        // })

        // 窗口改变尺寸的时候,会高频触发
        $(window).resize(function() {
            console.log('3');
        });
    </script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>

绑定事件的其他方法

  之前有一个click点击事件的绑定,现在又新增一个bind。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>绑定事件bind</title>
    <style type="text/css">
        
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            // //只能绑定click事件,不能绑定其他的了
            // $('#btn').click(function() {
            //  /* Act on the event */
            // });

            //bind方式可绑定多个事件
            $('#btn').bind('click mouseover', function() {
                alert('hello!');

                //取消绑定事件
                $(this).unbind('mouseover');
            });
        })
    </script>
</head>
<body>
    <input type="button" value="按钮" id="btn">
</body>
</html>

bind用户绑定多个事件,事件用空格隔开,后面加触发后的函数。

主动触发与自定义事件

  • 主动触发
    可使用jquery对象上的trigger方法来触发对象上绑定的事件。
  • 自定义事件
    除了系统事件外,可以通过bind方法自定义事件,然后用tiggle方法触发这些事件。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义事件</title>
    <style type="text/css">
        
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            //自定义事件只能用bind方式绑定,第一个参数是事件的名字,第二个参数是事件发生时执行的函数
            $('#btn1').bind('hello', function(){
                alert('hello');
            })
            $('#btn1').bind('click', function(){
                alert('click');
            })
            $('#btn2').click(function() {
                // trigger即可以触发自定义事件,也可以触发原始的事件
                $('#btn1').trigger('hello');
                $('#btn1').trigger('click');
            });
            
            //不一定点击按钮触发,也可页面加载时触发,也可在满足某种if条件时触发
            // $('#btn1').trigger('hello');
        })
    </script>
</head>
<body>
    <input type="button" value="按钮" id="btn1">
    <input type="button" value="按钮2" id="btn2">
</body>
</html>

事件冒泡

什么是事件冒泡

  在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

事件冒泡的作用

  事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元素上),它还可以让你在对象层的不同级别捕获事件。

阻止事件冒泡

  事件冒泡机制有时候是不需要的,需要阻止掉,通过 event.stopPropagation() 来阻止,简写的形式就是返回一个false。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件冒泡</title>
    <style type="text/css">
        .grandfather{
            width: 300px;
            height: 300px;
            background-color: green;
            position: relative;
        }
        .father{
            width: 200px;
            height: 200px;
            background-color: gold;
        }
        .son{
            width: 100px;
            height: 100px;
            background-color: red;
            position: absolute;
            left: 0;
            top: 400px;
        }
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $('body').click(function() {
                alert(4);
            });
            $('.grandfather').click(function() {
                alert(3);
            });
            $('.father').click(function() {
                alert(2);
            });
            $('.son').click(function(event) {//event代表当前事件
                alert(1);
                // console.log(event);//显示很多属性,其中clientX、clientY就是点击的坐标
                // alert("X轴坐标:" + event.clientX);

                // //阻止事件冒泡
                // event.stopPropagation();

                //合并阻止操作:把阻止冒泡和阻止默认行为合并
                return false;
            });

            //阻止右键菜单
            $(document).contextmenu(function(event){
                // //阻止默认行为(原来右键能弹出菜单,阻止后无法弹出)
                // event.preventDefault();

                //合并阻止
                return false;
            })
        })
    </script>
</head>
<body>
    <div class="grandfather">
        <div class="father">
            <div class="son"></div>
        </div>
    </div>
</body>
</html>

事件委托

  事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作。
事件委托的好处:

  • 首先可以极大减少事件绑定次数,提高性能;
  • 其次可以让新加入的子元素也可以拥有相同的操作。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委托</title>
    <style type="text/css">
        .list{
            list-style: none;
        }

        .list li{
            height: 30px;
            background-color: green;
            margin-bottom: 10px;
            color: #fff;
        }
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            /*
                      一般绑定事件的写法,每一个子元素绑定点击事件。
            给每个li绑定事件,一共绑定了8次,性能不高
            $('.list li').click(function() {
                alert($(this).html());
            });
            */          
            // 事件委托:方法delegate,只绑定一次事件,冒泡触发
            //  参数:
            //      selector选择器:写入ul下面的所有要发生事件的元素,多个元素用空格隔开,例如‘li a span’
            //      eventType事件
            //      function要执行的操作
            //在delegate中绑定的子元素可以使多个,用空格隔开。如'li a span'。
            $('.list').delegate('li', 'click', function() {
                //$(this)指发生事件的子集,即每个li
                alert($(this).html());

                //全部取消委托
                // $('.list').undelegate();
            });
        })
    </script>
</head>
<body>
    <ul class="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
</body>
</html>

jquery元素节点操作

一般的节点操作:

  • 创建节点

var div =('<div>');
var div2 =('<div>这是一个div元素</div>');

  • 插入节点
       1、append()和appendTo():在现存元素的内部,从后面插入元素

var span =('<span>这是一个span元素</span>');
('#div1').append(span);

   2、prepend()和prependTo():在现存元素的内部,从前面插入元素
   3、after()和insertAfter():在现存元素的外部,从后面插入元素
   4、before()和insertBefore():在现存元素的外部,从前面插入元素
<div id="div1"></div>

  • 删除节点

$('#div1').remove();
写一个简单的实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>节点操作</title>
    <style type="text/css">
        
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function(){
            var $span = $('<span>span元素</span>');
            var $p = $('<p>p段落元素</p>');
            var $h = $('<h1>页面标题</h1>');

            /*插入子元素*/
            //div中插入span和p(末尾追加)
            // $('#div1').append($span);
            // $('#div1').append($p);

            // 把span和p插入div中
            $span.appendTo('#div1');
            $p.appendTo('#div1');

            //把子元素插入到父元素(前面追加)
            // $('#div1').prepend($span);
            // $('#div1').prepend($p);
            // $span.prependTo('#div1');
            // $p.prependTo('#div1');

            //在div前边插入兄弟h1标题
            // $('#div1').before($h);
            $h.insertBefore('#div1');

            //在后边插入兄弟元素
            //after()
            //insertAfter()

            //删除p标签
            $p.remove();    
        })
    </script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>

知识点还有点多。@_@

相关文章

  • web进阶之二十七:jquery事件

      首先列出一些关于jquery事件的函数。 blur() 元素失去焦点focus() 元素获得焦点change(...

  • web进阶之二十五:JQuery

    jquery介绍 jQuery是目前使用最广泛的javascript函数库。据统计,全世界排名前100万的网站,有...

  • web进阶之二十七:json、ajax、jsonp

    json   json是 JavaScript Object Notation 的首字母缩写,单词的意思是java...

  • java web目录

    java web目录 web编程基础web编程进阶(一)web编程进阶(二)web编程原理

  • 进阶篇:jQuery事件(21-1)

    饥人谷学习进阶第 21 天 事件处理最头疼的问题:浏览器兼容问题jQuery封装了很好的API,方便进行事件处理 ...

  • jquery实战

    jQuery属性操作 jQuery特殊效果 jQuery动画 jQuery循环 jQuery其他事件 自定义事件

  • web进阶之十七:JavaScript

    起源和简介 JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证。所谓的前端验证,就是指检...

  • jQuery知识整理

    jQuery jQuery和DOM关系 jquery框架对象分析 加载事件 事件绑定 动画效果 jquery封装的...

  • jqurey事件

    jQuery 事件函数 jQuery 事件处理方法是 jQuery 中的核心函数。 事件处理程序指的是当 HTML...

  • jQuery基础(三)—事件篇-----鼠标事件

    jQuery鼠标事件之click与dbclick事件jQuery鼠标事件之mouseover与mouseout事件...

网友评论

    本文标题:web进阶之二十七:jquery事件

    本文链接:https://www.haomeiwen.com/subject/imvroftx.html