第八周第五天笔记

1 jQuery中的each及map

  • each()
    • $().each(callback):jQuery实例的each方法,只能遍历jQuery获得的元素数组;
      • 目的:遍历$()数组,多次执行callback函数,每执行一次向callback中传入两个实参;
      • callback回调函数中的实参:第一个实参为:数组索引值;第二个实参为:索引值对应的属性值,为原生JS标签元素;
      • callback回调函数中的this,为第二个实参,即原生JS标签元素;
      • 返回值:原来实例对象$();回调函数中无论是否添加返回值,都不会影响each的返回值;
      • 回调函数返回布尔值true,false
        • return true:跳至下一个循环(就像在普通的循环中使用'continue')。
        • return false:将停止循环 (就像在普通的循环中使用 'break')。
       <!DOCTYPE html>
       <html lang="en">
       <head>
           <meta charset="UTF-8">
           <title>实例each</title>
       </head>
       <body>
       <div>内容1</div>
       <div>内容2</div>
       <div>内容3</div>
       <div>内容4</div>
       <div>内容5</div>
       <div>内容6</div>
       <script src="js/jquery.js"></script>
       <script>
           var $aDiv=$("div");//获取的是一个jQuery元素数组,每一项为元素标签
           var res=$aDiv.each(function (index,item) {
               //传给callback的实参为两个,一个是数组索引值,一个是索引值对应的属性值,为原生JS标签元素
               //回调函数中的this,指的是item,即原生JS标签元素;
               console.log(this===item);//结果为true;
               /*var obj={};
               return obj;*/
               //无论回调函数中是否添加返回值,都不会影响each的返回值;
               if(index==3){
                   return true;//跳过此循环
               }
               console.log(index);//结果为:0,1,2,4,5
           });
           console.log(res)//结果为原来实例对象$aDiv;
       </script>
       </body>
       </html>
      
    • $.each(object,callback):实质是jQuery.each(),指jQuery类的静态属性方法,可以遍历jQuery获取的元素,也可以遍历原生数组和原生对象;
      • 目的:遍历任何对象和数组
      • object:被遍历的原生数组或原生对象,或jQuery获取的元素数组
      • 回调函数的实参:第一个实参为:数组索引值或对象的属性名;第二个实参为:数组每一项或对象的属性值
      • 返回值:传入的object,返回object;
      • 回调函数中可以返回布尔值true,false
      • 注意点:
        • 若object为原生数组,则回调函数中的this,与第二个参数相同;
        • 若object为原生对象,则回调函数中的this,与第二个参数不同,为一个对象;
        • 若object为jQuery获取的元素数组,则回调函数中的this,与第二个参数相同;
       <!DOCTYPE html>
       <html lang="en">
       <head>
           <meta charset="UTF-8">
           <title>静态属性each</title>
       </head>
       <body>
       <div>内容1</div>
       <div>内容2</div>
       <div>内容3</div>
       <div>内容4</div>
       <div>内容5</div>
       <div>内容6</div>
       <script src="js/jquery.js"></script>
       <script>
           //1 原生数组
           var aDiv=document.getElementsByTagName("div");
           var res=$.each(aDiv,function (index,item) {
               //item为原生JS标签元素
               console.log(item);
               //回调函数中的this为item;
               console.log(this===item);//结果为true;
           });
           console.log(res);//结果为:HTMLCollection元素集合,即aDiv原生JS数组;
           //2 原生对象
           var obj={name:"guobin",age:18};
           var ree=$.each(obj,function (index,item) {
               console.log(index);
               console.log(item);
               console.log(this);//此时的this不再是item;
           });
           console.log(ree);//返回obj
           /*打印结果为:
           * name
           * guobin
           * String {"guobin"}
           * age
           * 18
           * Number {18}
           * {name: "guobin", age: 18}
           * */
           //3 jQuery元素
           var rem=$.each($("div"),function (index,item) {
               console.log(index);
               console.log(item);
               console.log(this===item);//结果为true;即this跟item相同;
           });
           console.log(rem);//返回的是$("div"),jQuery元素数组;
       </script>
       </body>
       </html>
      
  • map()
    • $().map(callback):jQuery实例的map方法,只能遍历jQuery获得的元素数组
      • 目的:遍历$()数组,多次执行callback函数,返回callback函数的返回值;
      • callback回调函数中的实参:第一个实参为:数组索引值;第二个实参为:索引值对应的属性值,为原生JS标签元素;
      • callback回调函数中的this,为第二个实参,即原生JS标签元素;
      • callback回调函数的返回值,决定map的返回值;
      • 返回值:所有callback回调函数的返回值组成的数组,为jQuery数组,无返回值,则返回空数组;
      • 回调函数中不能设置false和true;
       <!DOCTYPE html>
       <html lang="en">
       <head>
           <meta charset="UTF-8">
           <title>实例map</title>
       </head>
       <body>
       <div>内容1</div>
       <div>内容2</div>
       <div>内容3</div>
       <div>内容4</div>
       <div>内容5</div>
       <div>内容6</div>
       <script src="js/jquery.js"></script>
       <script>
           var $aDiv=$("div");//获取的是一个jQuery元素数组,每一项为元素标签
           var res=$aDiv.map(function (index, item) {
               console.log(index);//为数组的索引
               console.log(item);//为数组索引对应的原生JS标签元素
               console.log(this===item);//结果为true;
               return item;
           });
           console.log(res);//返回值为:每个回调函数中返回值,组成的一个jQuery数组;
       </script>
       </body>
       </html>
      
    • $.map(arr|obj,callback):jQuery类的静态方法
      • 目的:遍历arr|obj,多次执行callback函数,返回callback函数的返回值;
      • callback回调函数中的实参:第一个实参为:索引值对应的属性值或对象的属性值;第二个实参为:数组索引值或对象属性名;第三个参数:未知;
      • callback回调函数中的this,均为window;
      • 返回值:所有callback回调函数的返回值组成的数组,为原生数组,如果callback回调函数无返回值,则为空数组;
      • 回调函数中不能设置false和true;
       <!DOCTYPE html>
       <html lang="en">
       <head>
           <meta charset="UTF-8">
           <title>静态map</title>
       </head>
       <body>
       <div>内容1</div>
       <div>内容2</div>
       <div>内容3</div>
       <div>内容4</div>
       <div>内容5</div>
       <div>内容6</div>
       <script src="js/jquery.js"></script>
       <script>
           //1 传入的为jQuery元素
           var $aDiv=$("div");//获取的是一个jQuery元素数组,每一项为元素标签
           var res=$.map($aDiv,function (item,index) {
               console.log(item);//为数组索引对应的原生JS标签元素
               console.log(index);//为数组的索引
               console.log(this);//结果为window;
               return item;
           });
           console.log(res);//返回值为:每个回调函数中返回值,组成的一个原生数组;
           //2 传入的是原生数组
           var aDiv=document.getElementsByTagName("div");
           var ree=$.map(aDiv,function (item,index) {
               console.log(item);//为数组索引对应的原生JS标签元素
               console.log(index);//为数组的索引
               console.log(this);//结果为window;
               return 3
           });
           console.log(ree)//返回值为:每个回调函数中返回值,组成的一个原生数组;
           //3 传入的是原生对象
           var obj={name:"dd",age:44};
           var rem=$.map(obj,function (val,attr) {
               console.log(val);//对象属性值
               console.log(attr);//对象属性名
               console.log(this);//结果为window;
               return 1;
           });
           console.log(rem)//返回值为:每个回调函数中返回值,组成的一个原生数组;
       </script>
       </body>
       </html>
      

2 渐隐渐现轮播图实例

  • 思路:
    • 页面结构,将每一个图片进行定位,然后叠加在一起;通过改变层级,来控制哪张图片显示;
    • 渐隐渐现效果:可以分为两种
      • 1)设置图片的透明度为0,然后需要哪张图片显示的时候,将其透明度设置为1;利用animate()方法;
        1. 设置图片的显示和隐藏,让每个图片隐藏,当需要显示的时候,利用fadeIn()或show()来显示,利用fadeOut()或hide()隐藏;
  • 知识点:
    • jQuery动态插入DOM结构后,需要重新获取元素集合,无DOM映射;
    • 在对每个图片进行设置时,必须要设置层级,再设置效果;
    • 动画操作中:如show(),hide(),fadeIn(),fadeOut(),slideUp()等,均是对元素的显示和隐藏进行效果设置,而animate()则可以进行其他属性效果的设置;
  • 代码:
    • JS代码:
     //获取元素
     var $oWrap=$(".wrap");
     var $boxBanner=$(".wrap .boxbanner");
     var $ul=$(".wrap ul");
     var $aLeft=$(".Left");
     var $aRight=$(".Right");
     var $aImg=null;
     var $aLi=null;
     var data=null;
     var n=-1;
     var timer=null;
     //获取数据
     getData();
     function getData() {
         $.ajax({
             type: "get",
             url: "data/data1.txt",
             dataType: "json",
             async: false,
             success: function (val) {
                 data=val;
             }
         })
     }
     //绑定数据
     blind();
     function blind() {
         var str="";
         var strli="";
         //遍历数组对象,data为原生数组
         $.each(data,function (index, item) {
             str+=`<img src="" realImg="${item.imgSrc}" alt="">`;
             strli+=index==0?'<li class="active"></li>':"<li></li>";
         });
         //添加内容用html()
         $boxBanner.html(str);
         $ul.html(strli);
         $aLi=$ul.children("li");
     }
     //图片延迟加载
     lazyImg();
     function lazyImg() {
         //jQuery中无DOM映射,所以在DOM操作后,要重新获取元素
         //重新获取aImg
         $aImg=$boxBanner.children("img");
         $aImg.each(function (index, item) {
             var frgImg=new Image;
             frgImg.src=$(item).attr("realImg");
             frgImg.onload=function () {
                 item.src=this.src;
                 frgImg=null;
             }
         });
         autoMove();//运行一次,让第一个先出现
         $ul.css("zIndex",1).stop().fadeIn(1000);
         timer=setInterval(autoMove,2000);
     }
     //图片自动轮播
     function autoMove() {
         //通过全局n来控制哪张图片显示
         n++;
         n%=$aImg.length;
         //先提高层级,再进行效果设置;
         /*$aImg.eq(n).css("zIndex",1).stop().fadeIn(1000,function () {
             $(this).siblings("img").css("zIndex",0).stop().hide();
         }).siblings("img").css("zIndex",0);*/
         //简化代码
         $aImg.eq(n).css("zIndex",1).stop().fadeIn(1000).siblings("img").css("zIndex",0).stop().fadeOut(1500);
         //add();
         autoMoveli();
     }
     //思路2:
     /*
     function add() {
         $aImg.each(function (index, item) {
             if(index==n){
                 $(item).css("zIndex",1).stop().fadeIn(1000,function () {
                     $(this).siblings("img").css("zIndex",0).hide();
                 })
             }else{
                 $(item).css("zIndex",0);
             }
         })
     }*/
     //焦点自动轮播
     function autoMoveli() {
         $aLi.eq(n).addClass("active").siblings("li").removeClass("active");
     }
     //鼠标移入停止,移出继续事件 链式操作
     $oWrap.mouseover(function () {
         clearInterval(timer);
         $aLeft.show();
         $aRight.show();
     }).mouseout(function () {
         timer=setInterval(autoMove,2000);
         $aLeft.hide();
         $aRight.hide();
     });
     //点击焦点手动切换
     $aLi.click(function () {
         //this为点击事件时对应的原生JS标签元素
         n=$(this).index();
         $aImg.eq(n).css("zIndex",1).stop().fadeIn(1000).siblings("img").css("zIndex",0).stop().fadeOut(1500);
         autoMoveli();
     });
     //点击左右按钮手动切换
     $aRight.click(autoMove);
     $aLeft.click(function () {
         if(n<=0){
             n=$aImg.length;
         }
         n--;
         $aImg.eq(n).css("zIndex",1).stop().fadeIn(1000).siblings("img").css("zIndex",0).stop().fadeOut(1500);
         autoMoveli();
     });
    
    
    • html代码:
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>渐隐渐现轮播图</title>
         <style>
             *{
                 margin: 0;
                 padding: 0;
                 list-style: none;
             }
             .wrap{
                 width: 750px;
                 height: 290px;
                 margin: 20px auto;
                 position: relative;
                 background: url("image1/7.png") no-repeat center;
                 background-size: cover;
             }
             .wrap .boxbanner{
                 width: 750px;
                 height: 290px;
             }
             .wrap .boxbanner img{
                 width: 100%;
                 height: 100%;
                 position: absolute;
                 left: 0;
                 top: 0;
                 display: none;
                 z-index: 0;
             }
             /*.wrap .boxbanner img:first-child{
                 opacity: 1;
                 filter: alpha(opacity=1);
                 z-index: 1;
             }*/
             .wrap ul{
                 position: absolute;
                 right: 20px;
                 bottom: 20px;
                 z-index: 1;
                 display: none;
             }
             .wrap ul li{
                 width: 20px;
                 height: 20px;
                 float: left;
                 border-radius: 50%;
                 background-color: lightslategray;
                 margin-left: 10px;
             }
             .wrap ul li.active{
                 background-color: red;
             }
             .wrap a{
                 position: absolute;
                 width: 43px;
                 height: 67px;
                 top: 50%;
                 margin-top: -22px;
                 background: url("image1/6.png") no-repeat lightslategray;
                 display: none;
                 opacity: 0.4;
                 filter: alpha(opacity=40);
                 z-index: 1;
             }
             .wrap a:hover{
                 opacity: 0.8;
                 filter: alpha(opacity=80);
             }
             .wrap a.Left{
                 left: 20px;
                 background-position: 0 0;
             }
             .wrap a.Right{
                 right: 20px;
                 background-position: -62px 0;
             }
         </style>
     </head>
     <body>
     <div class="wrap">
         <div class="boxbanner">
             <!--<img src="" realImg="image1/1.jpg" alt="">
             <img src="" realImg="" alt="">
             <img src="" realImg="" alt="">
             <img src="" realImg="" alt="">
             <img src="" realImg="" alt="">-->
         </div>
         <ul>
             <!--<li class="active"></li>
             <li></li>
             <li></li>
             <li></li>
             <li></li>-->
         </ul>
         <a href="javascript:void(0);" class="Left"></a>
         <a href="javascript:void(0);" class="Right"></a>
     </div>
     <script src="js/jquery.js"></script>
     <script src="js/banner2.js"></script>
     </body>
     </html>
    

3 jQuery版左右切换轮播图实例

  • 代码:
    • JS代码:
     //获取元素
     var $oWrap=$(".wrap");
     var $boxBanner=$oWrap.find(".boxbanner");
     var $aImg=null;
     var $ul=$oWrap.find("ul");
     var $aLi=null;
     var $aLeft=$oWrap.find(".Left");
     var $aRight=$oWrap.find(".Right");
     var data=null;
     var n=0;
     var timer=null;
     //获取数据
     getData();
     function getData() {
         $.ajax({
             type: "get",
             url: "data/data2.txt",
             async: false,
             dataType: "json",
             success: function (val) {
                 data=val;
             }
         })
     }
     //绑定数据
     blind();
     function blind() {
         var str="";
         var strli="";
         $.each(data,function (index, item) {
             str+=`<img src="" realImg="${item.imgSrc}" alt="">`;
             strli+=index==0?`<li class="active"></li>`:`<li></li>`;
         });
         //在boxbanner后面添加与第一张相同的一张图片,设置宽度
         str+=`<img src="" realImg="${data[0].imgSrc}" alt="">`;
         //插入到页面
         $boxBanner.html(str);
         //重新获取数据$aImg,无DOM映射
         $aImg=$boxBanner.children("img");
         $boxBanner.css({
            width: $aImg[0].offsetWidth*$aImg.length
         });
         $ul.html(strli);
         //重新获取数据
         $aLi=$ul.children("li");
     }
     //图片延迟加载
     lazyImg();
     function lazyImg(){
         $aImg.each(function (index,item) {
             var frgImg=new Image;
             frgImg.src=$(item).attr("realImg");
             frgImg.onload=function () {
                 item.src=this.src;
                 frgImg=null;
             }
         });
         timer=setInterval(autoMove,3000);
     }
     //自动轮播
     function autoMove() {
         n++;
         n%=$aImg.length;
         /*$boxBanner.css({
             left:-n*750
         });*/
         //设置一个运动效果
         $boxBanner.stop().animate({left:-n*750},1500,function () {
             if(n>=$aImg.length-1){
                 $boxBanner.css("left",0);
                 n=0;
             }
         });
         autoMoveLi(n);
     }
     //焦点自动轮播
     function autoMoveLi(m) {
         m%=$aImg.length-1;
         $aLi.eq(m).addClass("active").siblings("li").removeClass("active");
     }
     //鼠标移入停止,鼠标移出继续
     $oWrap.mouseover(function () {
         clearInterval(timer);
         $aLeft.show();
         $aRight.show();
     }).mouseout(function () {
         $aLeft.hide();
         $aRight.hide();
         timer=setInterval(autoMove,3000);
     });
     //焦点手动轮播
     handMoveli();
     function handMoveli() {
         $aLi.click(function () {
             clearInterval(timer);
             n=$(this).index();
             $boxBanner.stop().animate({left:-n*750},1500);
             autoMoveLi(n);
         })
     }
     //左右按钮手动切换
     $aRight.click(autoMove);
     $aLeft.click(function () {
         if(n<=0){
             n=$aImg.length-1;
             $boxBanner.css({left:-n*750});
         }
         n--;
         $boxBanner.stop().animate({left:-n*750},1500,function () {
             if(n<=0){
                 n=$aImg.length-1;
                 $boxBanner.css({left:-n*750});
             }
         });
         autoMoveLi(n);
     });
    
    • html代码:
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>左右切换轮播图</title>
         <style>
             *{
                 margin: 0;
                 padding: 0;
                 list-style: none;
             }
             .wrap{
                 width: 750px;
                 height: 290px;
                 margin: 20px auto;
                 position: relative;
                 overflow: hidden;
             }
             .wrap .boxbanner{
                 width: 3000px;
                 height: 290px;
                 position: absolute;
                 left: 0;
                 top: 0;
             }
             .wrap .boxbanner img{
                 width: 750px;
                 height: 290px;
                 float: left;
             }
             .wrap ul{
                 position: absolute;
                 right: 40px;
                 bottom: 20px;
             }
             .wrap ul li{
                 width: 20px;
                 height: 20px;
                 border-radius: 50%;
                 background-color: lightslategray;
                 float: left;
                 margin-left: 20px;
             }
             .wrap ul li.active{
                 background-color: red;
             }
             .wrap a{
                 position: absolute;
                 width: 43px;
                 height: 67px;
                 top: 50%;
                 margin-top: -34px;
                 background: url("image1/6.png") no-repeat lightslategray;
                 opacity: 0.5;
                 filter: alpha(opacity:50);
                 display: none;
             }
             .wrap a:hover{
                 opacity: 1;
                 filter: alpha(opacity:100);
             }
             .wrap a.Left{
                 left: 20px;
                 background-position: 0 0;
             }
             .wrap a.Right{
                 right: 20px;
                 background-position: -62px 0;
             }
         </style>
     </head>
     <body>
     <div class="wrap">
         <div class="boxbanner">
             <!--<img src="image1/1.jpg" alt="">
             <img src="image1/2.jpg" alt="">
             <img src="image1/3.jpg" alt="">
             <img src="image1/4.jpg" alt="">-->
         </div>
         <ul>
             <!--<li class="active"></li>
             <li></li>
             <li></li>
             <li></li>-->
         </ul>
         <a href="javascript:void(0);" class="Left"></a>
         <a href="javascript:void(0);" class="Right"></a>
     </div>
     <script src="js/jquery.js"></script>
     <script src="js/bom.js"></script>
     </body>
     </html>
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容