jQuery第二天(操作样式、属性、动画)

jQuery操作样式


css操作

功能:设置或者修改样式,操作的是style属性。

操作单个样式:这种方式一次只能设置一个样式

css(name, value);
//name:需要设置的样式名称
//value:对应的样式值
//使用案例:
$('li').css('color', 'red')
$('li').css('font-size', '30px')

设置多个样式

// obj:对象,每组都是键值对,代码一种样式
 // $('li').css({})
 /* 
  如果是有分号隔开的属性名,需要加''。
  如css({'font-size':'24px'})
 */
  $('li').css({
     color: 'red',
   	'text-decoration': 'underline'
  })

获取样式
只能获取满足条件的第一个元素的样式值

console.log($('li').css('color'))

//想要获取所有样式值必须遍历
let $lis = $('li')
for (let i = 0; i < $lis.length; i++) {
   console.log($('li').eq(i).css('color'))
}

class操作

添加样式类 ⇒ addClass(name); 相当于js的 dom.classList.add()
name:需要添加的样式类名,注意参数不要带点.

//添加.bordercolor样式
$box.addClass('bordercolor')

移除样式类 ⇒ removeClass(“name”);

//移除.bordercolor样式
$box.removeClass('bordercolor')

判断是否有某个样式类 (查找)⇒ hasClass(name)

 console.log($box.hasClass('one'));  
 //false表示没有 ,true表示有

切换样式类⇒ toggleClass(name);
如果有,移除该样式,如果没有,添加该样式。

$box.toggleClass('bordercolor');

【案例:tab栏切换案例.html】

$(function () {
            let $divs = $('.products > div')
            // 1.获取元素--导航项
            // 2.为li绑定事件:mouseenter
            // 3.在事件处理函数中
            // 3.1 为当前li元素添加样式,同时将所有兄弟元素的样式移除
            // 3.2 让对应的内容面板显示
            $('.tab > li').mouseenter(function () {
                $(this).addClass('active').siblings().removeClass('active')
                // 获取当前li元素的索引
                let index = $(this).index()
                // show(): 显示
                // hide():隐藏
                $divs.eq(index).show().siblings().hide()
            })
        })

jQuery操作属性


attr操作

设置单个属性、多个属性、获取属性、移除属性
相当于js: getAttribute() setAttribute()
1.一次只能设置一个属性
2.一次只可以获取一个属性

<body>

    <img src="./images/06.jpg" alt="图片加载失败显示" title="鼠标移入上去显示内容" id="pic">
    <script>
        // 访问一个不存在的变量,则报错,访问对象的不存在的属性,返回undefined
        console.log(this);

        $(function () {
            //设置属性  attr(name, value);
            //第一个参数:需要设置的属性名
            //第二个参数:对应的属性值
            $('img').attr('name', 'jack');

            //设置多个属性
            $('img').attr({
                name: 'jack',
                age: 30
            })

            //获取属性
            let res = $('img').attr('name');
            console.log(res);

            //属性移除
            $('img').removeAttr('name');
        })
    </script>
</body>

prop操作

在jQuery1.6之后,对于checked、selected、disabled这类boolean类型的属性来说,不能用attr方法,只能用prop方法。
prop:property属性

<body>
    <!-- checkbox 选中状态由checked属性来决定 -->
    <!-- attr无法获取标签的状态值(checked,disabled,selected) -->
    <input type="checkbox" value="你好">你好 <br>
    <button>点我啊</button>
    <script>
        $(function () {
            let $input = $('input')
            $('button').click(function () {
                //设置属性 为不选中状态
                $input.prop('checked', false)

                //获取属性 查看选中状态、查看value值
                console.log($input.prop('checked'))
                console.log($input.prop('value'))
            })
        })
    </script>
</body>

【案例:表格全选案例.html】

<script>
    $(function () {
    // 1.单击全选复选框,让内容列表中的复选框的选中状态和全选复选框一样
    // 1.1  获取全选复选框的状态:prop
    // 1.2  获取内容列表中的复选框,设置它们的状态:prop

    // 2.单击内容列表中的复选框
    // 2.1 获取当前被选中的复选框的数量,与原始的复选框的数量进行比较
    // 2.2 如果一致,则全选,否则取消全选
    let $j_cbAll = $('#j_cbAll')
    let $j_tbs = $('#j_tb input')

    $j_cbAll.click(function () {
        // 获取全选复选框的状态
        let state = $(this).prop('checked')
        console.log(state)
        // 获取内容列表中的复选框,设置它们的状态
        $j_tbs.prop('checked', state)
    })

    $j_tbs.click(function () {
        // 获取当前被选中的复选框的数量
        // :checked:可以标记当前复选框被选中
        let checkNum = $('#j_tb input:checked').length
        console.log(checkNum)
        // 与原始的复选框的数量进行比较
        if (checkNum == $j_tbs.length) {
            $('#j_cbAll').prop('checked', true)
        } else {
            $('#j_cbAll').prop('checked', false)
        }
    })
})
</script>

jQuery动画


三组基本动画

jquery提供了三组基本动画,这些动画都是标准的、有规律的效果,jquery还提供了自定义动画的功能。【演示动画例子】

1.显示(show)与隐藏(hide)是一组动画: display
2.滑入(slideUp)与滑出(slideDown)与切换(slideToggle),效果与卷帘门类似 height
3.淡入(fadeIn)与淡出(fadeOut)与切换(fadeToggle) opacity

show([speed], [easing], [callback]);
speed(可选): 动画的执行时间 animationduration
1.如果不传,就没有动画效果。如果是slide和fade系列,会默认为normal
2.毫秒值(比如1000),动画在1000毫秒执行完成(推荐)
3.固定字符串,slow(200)、normal(400)、fast(600),如果传其他字符串,则默认为normal。
easing(可选): 动画效果,默认是swing,秋千,提供了一个linear 匀速的效果 aniamtion-timing-function
callback(可选): 执行完动画后执行的回调函数

show
<body>
    <button>展示元素</button>
    <button>隐藏元素</button>
    <button>切换元素的显示与隐藏</button>
    <div id="box"></div>
    <script>
        $(function () {
            let $box = $('#box')
            
            $('button:eq(0)').click(function () {
            	//执行5秒 匀速 
                $box.show(5000, 'linear', function () {
                    console.log('动画做完了')
                })
            })

            $('button:eq(1)').click(function () {
            	//隐藏
                $box.hide()
            })

            $('button:eq(2)').click(function () {
            	//切换显示隐藏
                $box.toggle()
            })
        })
    </script>
</body>
slide
<body>
    <button>垂直向下</button>
    <button>垂直向上</button>
    <button>上下切换</button>
    <div id="box"></div>
    <script>
        $(function () {
            let $box = $('#box')
            
            $('button:eq(0)').click(function () {
            	//滑出
                $box.slideDown(1000)
            })

            $('button:eq(1)').click(function () {
            	//滑入
                $box.slideUp()
            })

            $('button:eq(2)').click(function () {
            	//切换
                $box.slideToggle()
            })
        })
    </script>
</body>
fade
<body>
    <button>淡入</button>
    <button>淡出</button>
    <button>淡入淡出</button>
    <button>注册</button>
    <div class="tip"></div>
    <div id="box"></div>
    <script>
        $(function () {
            let $box = $('#box')
            
            $('button:eq(0)').click(function () {
            	//淡入
                $box.fadeIn(1000)
            })

            $('button:eq(1)').click(function () {
            	//淡出
                $box.fadeOut()
            })

            $('button:eq(2)').click(function () {
            	//切换
                $box.fadeToggle()
            })

            $('button:eq(3)').click(function () {
                $('.tip').text('注册成功').fadeIn(300).delay(3000).fadeOut(300)
            })
        })
    </script>
</body>

【案例:京东轮播图(呼吸灯).html】

<script>
        $(function () {
            let $arrow = $('.arrow')
            let $lis = $('li')

            let index = 0 // 图片的起始索引
            // 1.鼠标上移的时候,让箭头出现,移出的时候让箭头隐藏

            // 2.实现下一张效果
            // 2.1 让索引 +1
            // 2.2 让对应索引位置的图片显示,让其它的图片隐藏  --fade

            $('.slider > ul').mouseenter(function () {
                $arrow.show()
            })
            // .mouseleave(function () {
            //     $arrow.hide()
            // })

            $('.arrow-right').click(function () {
                index++
                console.log(index)
                if (index > $lis.length - 1) {
                    index = 0
                }
                $lis.eq(index).fadeIn().siblings().fadeOut()
            })

            $('.arrow-left').click(function () {
                index--
                console.log(index)
                if (index < 0) {
                    index = $lis.length - 1
                }
                $lis.eq(index).fadeIn().siblings().fadeOut()
            })
        })
    </script>

自定义动画

animate: 自定义动画,支持用户自定义样式
注意:样式有一个限制:必须是数值动画

$(selector).animate({params},[speed],[easing],[callback]);
params: 要执行动画的CSS属性,带数字(必选)
speed: 执行动画时长(可选)
easing: 执行效果,默认为swing(缓动) 可以是linear(匀速)
callback: 动画执行完后立即执行的回调函数(可选)

<body>
    <button>动第一个</button>
    <button>动第二个</button>
    <div>swing</div>
    <div>linear</div>
    <script>
    	//修改盒子的位置 宽高(必须有定位)
        $(function () {
            let $swing = $('div').eq(0)
            let $linear = $('div').eq(1)

            $('button:eq(0)').click(function () {
                $swing.animate({
                    left: '500px',
                    top: 500,
                    'background-color': 'red',
                    width: 400
                }, 2000, 'linear', function () {
                    $linear.animate({
                        left: '500px'
                    }, 2000, 'linear', function () {

                    })
                })
            })
        })
    </script>
</body>

动画队列与停止动画

在同一个元素上执行多个动画,那么对于这个动画来说,后面的动画会被放到动画队列中,等前面的动画执行完成了才会执行。

动画队列

<body>
    <button>动起来</button>
    <div id="box"></div>
    <script>
        $(function () {
            let $div = $('div')
            // jq的动画队列是指:将我们所设置的所有动画都添加到一个任务队列中,这个队列就称为动画队列
            // jq会将这个队列中的所有动画都执行
            // 所有动画都有动画队列的概念
            $('button').click(function () {
                $div
                    .fadeIn(3000) // 第一个动画
                    .animate({ // 第二个动画
                        left: 800
                    }, 2000, 'linear')
                    .animate({// 第三个动画
                        top: 400
                    }, 2000, 'linear')
                    .animate({
                        left: 0
                    }, 2000, 'linear')
                    .animate({
                        top: 0
                    }, 2000, 'linear')
            })
        })
    </script>
</body>

停止动画

stop方法: 停止动画效果,停止动画队列中的一切动画
stop(clearQueue, jumpToEnd);
//第一个参数:是否清除队列
//第二个参数:是否跳转到最终效果

【案例:手风琴特效】

<body>
    <div id="box">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <script>
        $(function () {
            // 1.设置图片--背景
            // 1.1 获取所有li元素
            // 1.2 添加样式:循环遍历,因为li元素的样式设置是不一样的
            let $lis = $('li')
            for (let i = 0; i < $lis.length; i++) {
                $lis.eq(i).css({
                    'background-image': `url(./images/${i + 1}.jpg)`,
                    'background-size': 'cover',
                    'background-position': 'center'
                })
            }

            // 2.实现鼠标移入效果
            // 2.1 让当前的li元素的宽度变成800 animate
            // 2.2 让它的兄弟元素的宽度变成100
            $lis.mouseenter(function () {
                // 解决动画抖动的方式就是在动画之前添加stop
                $(this).stop().animate({
                    width: 800
                }, 1000)
                $(this).siblings().stop().animate({
                    width: 100
                }, 1000)
            })

            // 3.添加鼠标移出效果
            // 3.1 让所有li的宽度恢复为240
            $lis.mouseleave(function () {
                $lis.stop().animate({
                    width: 240
                }, 1000)
            })
        })
    </script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值