jQuery-02

作者: xiaohan_zhang | 来源:发表于2019-09-25 21:53 被阅读0次
事件绑定

js 可以添加多个相同或不同类型的事件,不会覆盖,都会执行。

  • eventName(fn) 推荐
    注意:部分事件jQuery没有实现,不能添加
$("button").click(function () {
    alert("第一种");
});
  • on(eventName, fn)
    所有事件都可以添加
$("button").on("click", function () {
    alert("第二种");
});
off() 事件解绑

不传参数,移除全部事件
传递一个参数,会移除指定类型的所有事件
传递两个参数,会移除指定类型的指定事件

function test1(){
    alert("test1");
}
function test2(){
    alert("test2");
}
$("button").click(test1);
$("button").click(test2);
$("button").mouseleave(function () {
    alert("mouseleave");
});
// 移除事件
// $("button").off();
// $("button").off("click");
$("button").off("click", test1);
事件冒泡和默认行为
  • 事件冒泡
    子元素和父元素同时绑定了事件,那么子元素事件触发时,也会触发父元素的事件
  • 阻止事件冒泡
$(".son").click(function () {
    alert("son");
    // 方式一
    return false;
});
$(".son").click(function (event) {
    alert("son");
    // 方式二
    event.stopPropagation();
});
$(".father").click(function () {
   alert("father");
});
  • 默认行为
    比如a标签点击就会跳转,form的submit按钮点击也会跳转
  • 阻止默认行为
// 方式一
$("a").click(function () {
    // alert("我是百度");
    return false;
});
// 方式二
$("input").click(function (event) {
    event.preventDefault();
});
事件自动触发
  • trigger() 自动触发事件
    会触发事件冒泡
    会触发默认行为
  • triggerHandler()自动触发事件
    不会触发事件冒泡
    不会触发默认行为
$(".son").click(function () {
    alert("son");
    return false;
});

$(".father").click(function () {
    alert("father");
});
// 方式一
$(".father").trigger("click");

// 方式二
$(".father").triggerHandler("click");

$("input[type='submit']").click(function () {
    alert("submit");
});
$("input[type='submit']").trigger("click");

<div class="father">
    <div class="son"></div>
</div>
<form action="https://taobao.com">
    <input type="text">
    <input type="submit">
</form>
自定义事件

两个条件:
1.事件必须通过on绑定
2.事件必须通过trigger()来触发

$(".son").on("myClickTest", function () {
    alert("son");
    return false;
});
$(".son").trigger("myClickTest");
事件命名空间

1.事件必须通过on绑定
2.事件必须通过trigger()来触发
注意:
利用trigger()触发子元素带命名空间的事件,那么父元素带相同命名空间的事件,也会被触发冒泡。
利用trigger()触发子元素不带命名空间的事件,那么子元素所以相同类型的事件都会被触发,父元素所有相同类型的事件都会被触发冒泡。

$(".father").on("click.xiaohong", function () {
    alert("father xiaohong");
});
$(".father").on("click", function () {
    alert("father");
});

// 添加click事件
$(".son").on("click.xiaohong", function () {
    alert("son xiaohong");
//    return false;
});
// 添加click事件
$(".son").on("click.xiaolan", function () {
    alert("son xiaolan");
//    return false;
});
$(".son").trigger("click.xiaohong");
$(".son").trigger("click");
事件委托
$("button").click(function () {
    $("ul").append("<li>我是新增的li</li>");
});
// 如果找到的元素不止一个,会给找到的所有元素添加事件
// 这种方式,新增的li不会被绑定事件
// $("ul>li").click(function () {
//     alert("click");
// });
// 将li的事件委托给ul
$("ul").delegate("li","click",function () {
    alert("delete click");
    console.log($(this).html()); // 这里的this是li
});
鼠标移入移出事件
/*
// 当子元素被移入移出也会触发父元素的事件
$(".father").mouseover(function () {
    console.log("father被移入了");
});
$(".father").mouseout(function () {
    console.log("father被移出了");
});
*/

/*
// 当子元素被移入移出不会触发父元素的事件-----推荐
$(".father").mouseenter(function () {
   console.log("father被移入了");
});
$(".father").mouseleave(function () {
   console.log("father被移出了");
});
*/

$(".father").hover(function () {
    console.log("father被移入了");
},function () {
    console.log("father被移出了");
});

//    只写一个参数 移入移出都会被监测
// $(".father").hover(function () {
//     console.log("father hover");
// });
显示/隐藏动画
  • 显示show()
// $("div").css("display", "block");
// $("div").show(1000);
$("div").show(1000, function () {
   alert("显示动画执行完毕");
});
  • 隐藏hide()
// $("div").css("display", "none");
// $("div").hide(1000);
$("div").hide(1000, function () {
    alert("隐藏动画执行完毕");
});
  • 切换toggle()
    隐藏变显示 显示变隐藏
// $("div"). toggle(1000);
$("div").toggle(1000, function () {
    alert("切换动画执行完毕");
});
展开和收起动画
  • 展开slideDown()
// $("div").slideDown(1000);
$("div").slideDown(1000, function () {
   alert("展开完毕");
});
  • 收起slideUp()
// $("div").slideUp(1000);
$("div").slideUp(1000, function () {
    alert("收起完毕");
});
  • 切换slideToggle()
    展开变收起 收起变展开
// $("div").slideToggle(1000);
$("div").slideToggle(1000, function () {
    alert("切换完毕");
});
  • 停止执行stop()
$("div").stop();

注意:如果要执行动画,建议在执行动画前先调用stop()方法,然后再执行动画。

淡入淡出动画
  • 淡入fadeIn()
$("div").fadeIn(1000, function () {
    alert("淡入动画完毕");
});
  • 淡出fadeOut()
$("div").fadeOut(1000, function () {
    alert("淡出动画完毕");
});
  • 切换fadeToggle()
    淡入变淡出 淡出变淡入
$("div").fadeToggle(1000, function () {
    alert("切换完毕");
});
  • 淡入到fadeTo()
$("div").fadeTo(1000, 0.3, function () {
    alert("淡入到动画完毕");
});

$('.ad').stop().slideDown(2000).fadeOut(2000).fadeIn(3000);

自定义动画 animate()

第一个参数:接收一个对象,可以在对象中修改属性
第二个参数:指定动画时长
第三个参数:指定动画节奏,默认是swing(先慢再快再慢)
第四个参数:动画执行完毕后的回调函数

  • 修改属性
$(".one").animate({
    // width:500,
    marginLeft: 500
}, 5000, function () {

});

$(".two").animate({
    marginLeft:500
}, 5000, "linear", function () {

});
  • 累加属性
$(".one").animate({
    width: "+=100"
}, 1000, function () {

});
  • 关键字
$(".one").animate({
    // width: "hide" // 隐藏
    width: "toggle" // 隐藏
}, 1000, function () {

});
  • delay()方法
// 可以同时修改多个属性,多个属性动画会同时执行
/*
$(".one").animate({
    width: 500,
    height: 500
}, 1000);
 */
// 分开执行
/*
$(".one").animate({
    width: 500
}, 1000);
$(".one").animate({
    height: 500
}, 1000);
 */
// $(".one").stop().animate({width:500},1000).animate({height:500},1000);
// 执行完宽度变化后等2秒再执行高度变化
$(".one").stop().animate({width:500},1000).delay(2000).animate({height:500},1000);
  • stop()方法
// 1. 立即停止当前动画,继续下一个动画
$(".one").stop();
$(".one").stop(false);
$(".one").stop(false,false);

// 2. 立即停止当前和后续所有的动画
$(".one").stop(true);
$(".one").stop(true, false);

// 3. 立即完成当前的动画,继续执行后续的动画
$(".one").stop(false, true);

// 4. 立即完成当前的动画,并且停止后续所有的动画
$(".one").stop(true, true);
添加节点相关方法
  • 内部插入
    append()、appendTo() 会将元素添加到指定元素最后;
    prepend()、prependTo() 会将元素添加到指定元素最前面;
// 创建一个节点
var $li = $("<li>新增的li</li>")
// 新增一个节点
// 添加到最后
$("ul").append($li); 
// $li.appendTo("ul");
// 添加到最前面
$("ul").prepend($li); 
// $li.prependTo("ul");
  • 外部插入
    after()、insertAfter() 会将元素添加到指定元素外部最后,和指定元素并列;
    before()、insertBefore() 会将元素添加到指定元素外部最前面,和指定元素并列;
var $li = $("<li>新增的li</li>");
$("ul").after($li);
// $li.insertAfter("ul");

$("ul").before($li);
// $li.insertBefore("ul");
删除节点相关方法

remove()、detach() 删除指定元素;
empty() 删除指定元素的内容和子元素,指定元素自身不会被删除;

$("li").remove();
$("li").remove(".item");
// $("li").detach();
// $("li").detach(".item");
$("div").empty();
替换节点

replaceWith()、replaceAll() 替换所有匹配的元素为指定元素

var $h6 = $("<h6>我是h6</h6>");
// 用h6替换p
$("p").replaceWith($h6);
// $h6.replaceAll("p");
复制节点

clone(false) 浅复制,可以复制元素,不能复制元素的事件;
clone(true) 深复制,可以复制元素,同时可以复制元素的事件;

// 浅复制
var $li = $("li:first").clone(false);
$("ul").append($li);
// 深复制
var $li = $("li:first").clone(true);
$("ul").append($li);

相关文章

  • jQuery-02

    1 css操作 2 class操作 3. 三组简单动画 4. 自定义动画 5. 动画队列 6. 节点操作 7. h...

  • jQuery-02

    事件绑定 js 可以添加多个相同或不同类型的事件,不会覆盖,都会执行。 eventName(fn) 推荐注意:部...

  • jQuery-02

    jQuery 属性操作 元素固有属性值 prop() 所谓元素固有属性就是元素本身自带的属性,比如 元素里面的...

网友评论

      本文标题:jQuery-02

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