Bootstrap轮播图的响应式切换(JS实时加载资源)

需求:

根据窗口尺寸,在宽度>640时加载大图,在宽度<=640时加载小图。


需求呈现
步骤:
  1. 在HTML的div.item标签中,将大图和小图的src写入自定义属性data-;
  2. 监听window窗口的resize事件;
  3. 用jQuery的each方法,对div.item取data-的值,赋到item的html中;
  4. 取值用jQuery对象的.data()方法,赋值用jQuery对象的.html()方法;
  5. 函数写完后调用一次,用事件的jQuery方法.trigger();
    用到的理论:遍历$元素.each()、标签的自定义属性data-与dataset、调用事件扳机trigger

$对象的each方法(jQuery)

作用:

用于遍历$jQuery对象,对这些元素进行批量的操作。

语法:
$items.each(function(index, element){})
说明:

在这个each方法中:

  • 函数的第一个参数,即index在函数运算中取值为$items[index]的索引值
  • 函数的第二个参数,即element在函数运算中取值为$items[index]即这个DOM对象
  • 所以$(element)为$items中的逐个DOM转jQuery对象(可以使用jQuery方法)
  • 在函数中return false; 将停止each循环。
W3school说明:

jQuery 遍历 - each() 方法

自定义属性data-*

用途:

存储DOM元素的属性,方便JS操作。如长串的图片名、普通文字字符串等。
提高代码的可维护性,在JS操作时避免拼接。

在 HTML中写入元素的自定义属性名

自定义属性名中可以用“-”套多层,如“data-item-src”。每个单词都不能用大写。
<tagName class=’类名’ data-属性名 = ”值”;></tagName>

原生JS取值
  • 元素的dataset是一个键值对数组,是当前元素里自定义属性的集合,属性名是键。
  • 取值时,就是在dataset中用属性名做键取值,属性名需要用驼峰连写,中间不能用“-”
    var 值 = DOMobj.dataset[“属性名”];
用jQuery取值
  • 在jQuery中,$对象的.data()就可以取到
    取值时,属性名可以用-,也可以用驼峰
    var 值 = $(obj).data(“属性名”);
    博客园链接:HTML5 data-* 自定义属性

自定义属性组dataset与类名组classList的区别

类名组classList是类名的结合(H5中),用来操作元素上所有的类名(className);

classList的方法
  • 增加类名 DOMobj.add(‘类名’);
  • 删除类名 DOMobj.remove(‘类名’);
  • 判断类名 DOMobj.contains(‘类名’);
  • 替换:有就加,没有就不加 DOMobj.toggle(‘类名’);
类名与自定义属性的层级不同
  • 自定义属性dataset中的每个自定义属性data-*=””在HTML中与class=””平级,写在行内;

事件的trigger方法(jQuery)

  • 放在事件注册的末尾,表示注册后立即发生一次该事件;
  • 语法:
    $(obj).on(“事件类型”, function(){ 函数体; }).trigger(“事件类型”);

代码实现

HTML中

大图用background-imge,小图用<a><img></a>但因为a是动态生成的,所以不能存值。值存在div.item

<div class="carousel-inner" role="listbox">
<!-- 轮播图的图片都写在a中,大图用background-imge,小图用<a><img></a>但因为a是动态生成的,所以不能存值。值存在div.item里 -->
<div class="item active" data-large-item="./img/slide_01_2000x410.jpg" data-small-item="./img/slide_01_640x340.jpg"></div>
<div class="item" data-large-item="./img/slide_02_2000x410.jpg" data-small-item="./img/slide_02_640x340.jpg"></div>
<div class="item" data-large-item="./img/slide_03_2000x410.jpg" data-small-item="./img/slide_03_640x340.jpg"></div>
<div class="item" data-large-item="./img/slide_04_2000x410.jpg" data-small-item="./img/slide_04_640x340.jpg"></div>
</div>
JS中
  1. 监听window窗口的resize事件;
  2. 用jQuery的each方法,对div.item取data-的值,赋到item的html中;
  3. 取值用jQuery对象的.data()方法,赋值用jQuery对象的.html()方法;
  4. 函数写完后调用一次,用事件的jQuery方法.trigger();
    用到的理论:遍历$元素.each()、标签的自定义属性data-与dataset、调用事件扳机trigger
$(function(){
$(window).on("resize",function(){     // 监听屏幕事件
    var windowWidth=$(window).width();     //获取屏幕尺寸
    console.log(windowWidth);
    // var $slideItem = $(".carousel-inner .item");  //需要赋值的元素:div.item
    if(windowWidth<=640){     // 屏幕尺寸判断:xs屏
        $(".carousel-inner .item").each(function(index, element){
            console.log($(element).data());
            //获取小图的src值,用html()方法写div.item>a
            $(element).html('<a href="#" class="smallPic"><img src="'+$(element).data()["smallItem"]+'"></a>');
        });
    }else{     // 尺寸判断:除了xs屏
        $(".carousel-inner .item").each(function(index, element){
            console.log($(element).data());
            // 获取大图和小图的src值,用html()方法写div.item>a
            $(element).html('<a href="#" class="largePic" style="background-image:url('+$(element).data()["largeItem"]+');"></a>');
        });
    }
}).trigger("resize");   //扳机触发事件

//入口函数末尾
})

2018.1.21

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

推荐阅读更多精彩内容