jQuery(四)——动态操作

(一)jQuery操作元素的尺寸

1.width和height

设置语法:jQuery对象.width(数字);
获取语法:jQuery对象.width();
得到的只是内容的大小。

代码举栗:

    <style>
        div {
            width: 500px;
            height: 500px;
            padding: 10px;
            border: 10px solid;
        }
    </style>
<body>
    <div></div>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        var w = $('div').width(); //返回的是一个number
        console.log(w); //500
        $('div').width(300); //把div设置为300px
    </script>
</body>

2.innerWidth和innerHeight

设置语法:jQuery对象.innerWidth(数字);
获取语法:jQuery对象.innerWidth();
得到的是内容部分大小 + padding的大小。
设置时padding固定不变,内容部分自动适应变化。

代码举栗:

    <style>
        div {
            width: 500px;
            height: 500px;
            padding: 10px;
            border: 10px solid;
        }
    </style>
<body>
    <div></div>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        var w = $('div').innerwidth(); //返回的是一个number
        console.log(w); //520。width+padding
        $('div').innerwidth(300); //div设置为300-20=280px,padding占有20px
    </script>
</body>

3.outerWidth和outerHeight

设置语法:jQuery对象.outerWidth(数字);
获取语法:jQuery对象.outerWidth();
得到的是内容部分大小 + padding + border的大小。
设置时padding和边框border固定不变,内容部分自动适应变化。

代码举栗:

    <style>
        div {
            width: 500px;
            height: 500px;
            padding: 10px;
            border: 10px solid;
        }
    </style>
<body>
    <div></div>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        var w = $('div').outerwidth(); //返回的是一个number
        console.log(w); //540。width+padding+border
        //div设置为300-20-20=260px,padding占有20px,border占有20px
        $('div').outerwidth(300); 
    </script>
</body>

(二)jQuery操作元素的位置

1.获取元素距离文档的位置

语法:jQuery对象.offset();
返回的是一个对象,对象中包含了元素的位置。(相对于文档的位置)
位置和定位无关。若元素加了(子绝父相)定位后也依然参照文档的位置。不论元素是否定位。

代码举栗:

    <style>
        div {
            width: 200px;
            height: 200px;
            margin: 0 auto;
            background: red;
        }
        p {
            height: 600px;
        }
    </style>
<body>
    <p></p>
    <div></div>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        var o = $('div').offset();
        console.log(o); //得到一个对象,其中包含top:632, left:574.5
        //设置时传参传的是对象。位置依然参照文档,和定位无关。
        var s = $('div').offset({top:0,left:0}); 
        console.log(s); //div变到页面左上角
    </script>
</body>

一般不会用到设置。
在DOM对象中,元素.offsetLeft和元素.offsetTop是只读的。

2.获取元素距离定位元素的位置

语法:**jQuery对象.position(); **
和定位有关系。返回一个包含left和top的对象。
但是position不能设置。

代码举栗:

    <style>
        .f {
            width: 200px;
            height: 200px;
            margin: 0 auto;
            background: red;
            position: relative;
        }
        .son {
            width: 200px;
            height: 200px;
            background: red;
            position: absolute;
        }
        p {
            height: 600px;
        }
    </style>
<body>
    <p></p>
    <div class="f">
        <div class="son"></div>
    </div>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        var o = $('.son').position();
        console.log(o); //得到一个对象,其中包含top:0, left:0
        //position方法只能获取元素的位置不能传参设置位置
        $('.son').position({left:50, top:50});
    </script>
</body>

3.操作卷去的页面间距

获取语法:jQuery对象.scrollTop();
设置语法:jQuery对象.scrollTop(数字);

代码举栗:

    <style>
        body {
            text-align: center;
        }
        div {
            width: 500px;
            height: 500px;
            margin: 0 auto;
            border: 1px solid;
            overflow: auto;
        }
    </style>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        //入口函数
        $(function () {
            //给div注册滚动条滚动事件
            $('div').scroll(function(){ 
                var v = $(this).scrollTop();
                console.log(v);
            });
            //回到顶部
            $('button').click(function(){
                $('div').scrollTop(0);
            });
        });
    </script>
<body>
    <div>
        <p></p>*100
    </div>
    <button>回到顶部</button>
</body>

在jQuery中可以使用$(window)直接获取页面卷去的间距,但是在原生方法中不可以。
不加动画时,可以直接使用$(window).scrollTop(数字)来直接设置值,但是在原生中不可以。

4.固定导航和回到顶部案例

<body>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        var _top = $('.box2').offset().top;
        $(window).scroll(function () {
            var v = $('window').scrollTop();
            if (v >= _top) {
                //给固定导航设置定位
                $('.box2').addClass('active');
                //设置回到顶部按钮显示
                $('.top').show();
            }
            else {
                $('.box2').removeClass('active');
                $('.top').hide();
            }
        });
        $('.top').click(function () {
            //动画中动的必须是元素(即标签)。
            $('html,body').animate({ scrollTop: 0 }, 500);
        })
    </script>
</body>

(三)jQuery事件操作

1.注册事件

语法:jQuery对象.事件名(事件处理程序);
在jQuery中事件的底层就是事件监听,可以实现事件叠加。

2.on方法注册事件

注册简单事件语法:jQuery对象.on('事件名',事件处理程序);

代码举栗:

<body>
    <button>click</button>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        $('button').on('click',function(){
            console.log(1);
        });
        $('button').on('click',function(){
            console.log(2);  //输出1 2。事件叠加
        });
    </script>
</body>

事件委托语法:jQuery对象.on('事件名','选择器',事件处理程序);
选择器:子孙元素
在事件处理程序中,this代表的是子孙元素(所点最先触发的)

3.off方法移除事件

移除简单事件语法:jQuery对象.off('click',事件处理程序名称);
移除事件委托的事件语法:jQuery对象.off('click',‘选择器’,事件处理程序名称);
不传参数的话会移除所有事件类型。
移除事件的底层也是事件监听(removeEventListener)。

代码举栗:

<script>
    // 解绑按钮的事件处理程序:fn1和fn2
    $('button').off('click',fn1);
    $('button').off('click',fn2);

    // 解绑通过事件委托给p注册的事件处理程序 fn2
    $('div').off('click','p',fn2);
</script>

4.触发事件

语法:jQuery对象.trigger('事件名');

5.事件对象

1)鼠标事件对象相关的属性
事件对象.clientX/Y 参照浏览器
事件对象.pageX/Y 参照文档
事件对象.offsetX/Y 参照元素
2)键盘事件对象相关的属性
事件对象.keyCode 返回键码数字
事件对象.alt/shift/ctrlKey 返回是布尔值。 检测是否按下(true)
3)公共的属性或方法
属性:事件对象.target;
方法
事件对象.preventDefault(); 阻止默认行为
事件对象.stopPropagation(); 阻止事件冒泡

(四)链式编程

可以用连续点点方式调用其他方法。
css方法只能jQuery对象调用

1.end方法

在链式上可以返回到上一个jQuery对象

代码举栗:

<body>
    <ul>
        <li>列表1</li>
        <li>列表2</li>
    </ul>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        $('ul li').eq(0).css('color','red') //返回索引为0的li的jQuery对象
        .parent().css('border','1px solid blue') //返回ul这个jQuery对象
        .end().css('background','gold');  //返回了索引为0的li的jQuery对象
    </script>
</body>

2.星级评级案例

    <style>
        span {
            font: bold 100px '宋体';
            float: left;
            color: gold;
            cursor: pointer;
        }
    </style>
<body>
    <div>
        <span>☆</span>
        <span>☆</span>
        <span>☆</span>
        <span>☆</span>
        <span>☆</span>
    </div>
    <script src="lib/jquery-1.12.4.js"></script>
    <script>
        $('span').mouseenter(function () {
            $(this).text('★').prevAll().text('★').end().nextAll().text('☆');
        });
        $('span').mouseleave(function () {
            $('span').text('☆');
            $('.active').text('★').prevAll().text('★').end().nextAll().text('☆');
        });
        $('span').click(function () {
            $(this).addClass('active').siblings().removeClass('active');
        });
    </script>
</body>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容

  • 通过jQuery,您可以选取(查询,query)HTML元素,并对它们执行“操作”(actions)。 jQuer...
    枇杷树8824阅读 654评论 0 3
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,167评论 0 3
  • 请记得在进行JQuery类库的运用时,加入JQuery类库,并且要保证先写文档就绪函数 $(document).r...
    Sunshinemm阅读 2,905评论 1 40
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,367评论 0 44
  • JQuery 1、JQuery特点 (1)轻量级(2)链式语法(3)简单(4)写的更少,做的更多 2、本地调用: ...
    Lizzy95阅读 261评论 0 1