使用Bootstrap插件(Carousel)制作响应式轮播图_使用bootstrap插件制作响应式轮播图_Pop–的博客-程序员秘密

技术标签: 移动web  javascript  

序言: 响应式轮播图制作后不管是大于768px的非移动端还是小于768px的移动端 都会加载所有资源,会导致页面的加载速度和解析效率降低 对移动端极其不利。所以我们需要手写js来动态创建

原因: 之所以会这样是因为图片是一个链接(后期我们点击图片会进行跳转)所以是个a标签 只要页面中含有a标签就会向服务器发送请求

一、所要达到效果:

  1. w<768px-移动端:图片会随着屏幕的缩小自动适应–缩小
    做法:将img的宽度为100%,通过img标签来实现
  2. w>=768px:
    图片做为背景,当屏幕宽度变宽的时候,会显示更多的图片的两边区域
    做法:
    1.background-image添加图片
    2.添加background-position:center center
    3.background-size:cover

二、使用插件后的代码(将移动端和pc端放在一起)

  1. 每一个item就是一个轮播的图片内容
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap 101 Template</title>
    <link href="./lib/bootstrap/css/bootstrap.css" rel="stylesheet">
</head>
<body>
<style>
    .mobileImg{
     
        width: 100%;
        display: block;
    }
    .mobileImg > img{
     
        width: 100%;
        display: block;
    }
    .pcImg{
     
        width: 100%;
        height: 410px;
        display: block;
        /*设置背景图片了*/

        /*设置图片居中显示*/
        background-position: center center;
        /*设置背景图片的大小*/
        background-size: cover;
    }
</style>
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
    <!-- Indicators -->
    <ol class="carousel-indicators">
        <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
        <li data-target="#carousel-example-generic" data-slide-to="1"></li>
        <li data-target="#carousel-example-generic" data-slide-to="2"></li>
        <li data-target="#carousel-example-generic" data-slide-to="3"></li>
    </ol>

    <!-- Wrapper for slides -->
    <div class="carousel-inner" role="listbox">
        <div class="item active">
            <!--移动端-->
            <a href="javascript:;" class="mobileImg hidden-sm hidden-md hidden-lg">
                <img src="./images/slide_01_640x340.jpg" alt="...">
            </a>
            <!--非移动端-->
            <a href="javascript:;" class="pcImg hidden-xs" style="background-image: url('./images/slide_01_2000x410.jpg');"></a>
        </div>
        <div class="item">
            <a href="javascript:;" class="mobileImg  hidden-sm hidden-md hidden-lg">
                <img src="./images/slide_02_640x340.jpg" alt="...">
            </a>
            <a href="javascript:;" class="pcImg  hidden-xs" style="background-image: url('./images/slide_02_2000x410.jpg');"></a>
        </div>
        <div class="item">
            <a href="javascript:;" class="mobileImg  hidden-sm hidden-md hidden-lg">
                <img src="./images/slide_03_640x340.jpg" alt="...">
            </a>
            <a href="javascript:;" class="pcImg  hidden-xs" style="background-image: url('./images/slide_03_2000x410.jpg');"></a>
        </div>
        <div class="item">
            <a href="javascript:;" class="mobileImg  hidden-sm hidden-md hidden-lg">
                <img src="./images/slide_04_640x340.jpg" alt="...">
            </a>
            <a href="javascript:;" class="pcImg  hidden-xs" style="background-image: url('./images/slide_04_2000x410.jpg');"></a>
        </div>
    </div>
    <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
        <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
        <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
</div>
<script src="./lib/jquery/jquery.min.js"></script>
<script src="./lib/bootstrap/js/bootstrap.min.js"></script>
</body>
</html>

三、出现问题

  1. 响应式轮播图制作后不管是大于768px的非移动端还是小于768px的移动端 都会加载所有资源,会导致页面的加载速度和解析效率降低 对移动端极其不利。
  2. 解决办法:使用js动态创建下面移动端和非移动端俩项:
       <div class="item active">
            <!--移动端-->
            <a href="javascript:;" class="mobileImg hidden-sm hidden-md hidden-lg">
                <img src="./images/slide_01_640x340.jpg" alt="...">
            </a>
            <!--非移动端-->
            <a href="javascript:;" class="pcImg hidden-xs" style="background-image: url('./images/slide_01_2000x410.jpg');"></a>
        </div>
  1. 创建后的结构 通过data来获取路径:
	<div class="carousel-inner" role="listbox">
        <div class="item active" data-large-image="./images/slide_01_2000x410.jpg" data-small-image="./images/slide_01_640x340.jpg">  
        </div>
 	</div>
  1. js代码(wjs-index.js)
    1.添加子元素
item.html($('<a href="javascript:;" class="pcImg"></a>').css("backgroundImage","url('"+imgSrc+"')"));
  1. 完整js代码
$(function(){
    
    /*获取当前所有item*/
    var items=$(".carousel-inner .item");
    /*监听屏幕的大小改变*/
    $(window).on("resize",function(){
    
        /*1.获取当前屏幕的宽度*/
        var width=$(window).width();
        /*2.判断屏幕的宽度*/
        if(width>=768){
    /*说明非移动端*/
            /*为每一个item添加子元素--遍历*/
            $(items).each(function(index,value){
    
                var item=$(this);
                /*当前自定义属性中 存储的图片路径*/
                var imgSrc=item.data("largeImage");
                console.log(imgSrc);
                /*添加非移动端的子元素*/
                item.html($('<a href="javascript:;" class="pcImg"></a>').css("backgroundImage","url('"+imgSrc+"')"));
            });
        }
        else{
    
            $(items).each(function(index,value){
    
                var item=$(this);
                var imgSrc=item.data("smallImage");
                item.html('<a href="javascript:;" class="mobileImg"><img src="'+imgSrc+'" alt="..."></a>');
            });
        }
    }).trigger("resize");

    /*添加移动端的滑动操作*/
    var startX,endX;
    var carousel_inner=$(".carousel-inner")[0];

    /*获取当前轮播图*/
    var carousel=$(".carousel");

    carousel_inner.addEventListener("touchstart",function(e){
    
        startX= e.targetTouches[0].clientX;
    });
    carousel_inner.addEventListener("touchend",function(e){
    
        endX= e.changedTouches[0].clientX;
        if(endX-startX > 0){
    
            /*上一张*/
            carousel.carousel('prev');
        }
        else if(endX-startX < 0){
    
            /*下一张*/
            carousel.carousel('next');
        }
    });
});

5.完整html代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap 101 Template</title>
    <link href="./lib/bootstrap/css/bootstrap.css" rel="stylesheet">
</head>
<body>
<style>
    .mobileImg{
     
        width: 100%;
        display: block;
    }
    .mobileImg > img{
     
        width: 100%;
        display: block;
    }
    .pcImg{
     
        width: 100%;
        height: 410px;
        display: block;
        /*设置背景图片了*/

        /*设置图片居中显示*/
        background-position: center center;
        /*设置背景图片的大小*/
        background-size: cover;
    }
</style>
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
    <!-- Indicators -->
    <ol class="carousel-indicators">
        <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
        <li data-target="#carousel-example-generic" data-slide-to="1"></li>
        <li data-target="#carousel-example-generic" data-slide-to="2"></li>
        <li data-target="#carousel-example-generic" data-slide-to="3"></li>
    </ol>

    <!-- Wrapper for slides -->
    <div class="carousel-inner" role="listbox">
        <div class="item active" data-large-image="./images/slide_01_2000x410.jpg" data-small-image="./images/slide_01_640x340.jpg">  
        </div>
        <div class="item" data-large-image="./images/slide_02_2000x410.jpg" data-small-image="./images/slide_02_640x340.jpg">
 
        </div>
        <div class="item" data-large-image="./images/slide_03_2000x410.jpg" data-small-image="./images/slide_03_640x340.jpg">

        </div>
        <div class="item" data-large-image="./images/slide_04_2000x410.jpg" data-small-image="./images/slide_04_640x340.jpg">

        </div>
    </div>
    <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
        <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
        <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
</div>
<script src="./lib/jquery/jquery.min.js"></script>
<script src="./lib/bootstrap/js/bootstrap.min.js"></script>
<script src="./js/wjs-index.js"></script>
</body>
</html>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45026839/article/details/113861560

智能推荐

kioptrix-level-1_4438x_cxyzupup的博客-程序员秘密

kioptrix-level-1-1,22项目地址:https://www.vulnhub.com/entry/kioptrix-level-1-1,22提示:靶机网络连接方式使用NAT模式。文章目录kioptrix-level-1-1,22一、信息收集1. 使用fping工具查找靶机IP:2. 使用nmap对目标主机端口进行枚举:二、信息利用1. 查看80端口:2. 查看443端口:总结一、信息收集1. 使用fping工具查找靶机IP:命令如下:[email protected]:~/Desktop$ fp

VS2019 C++ 使用 OCCI 连接调用 oracle (Windows 10)_haixin-561的博客-程序员秘密

一 :下载和配置客户端连接套件:oracle 官方下载地址:Oracle Instant Client下载 注意区分 x86和 x64。我自己用的是 x64 , Oracle 也是 x64. :(Microsoft Windows(x64)的即时客户端)点进去:下载最新版 Version 19.6.0.0.0两个压缩包:sdk(头文件,lib) 和 windows x64 基本客户端(内涵 .dll) 。下载后解压到电脑:SDK: 文件结构 ,包含头文件和 lib 以及dome文件等。

Google Chrome 的Cookies文件位置_weixin_33860528的博客-程序员秘密

自从Chrome面世以来我就一直使用它不为别的就为他的速度而着迷,还有元素检测!和一系列的突破右键封锁和复制的功能使我感到他的强大虽然目前js debug方面不敌ff debug但是我相信以后会强大起来!撤完蛋了来正题Google Chrome (目前我是用5.0.360.0版本) 他的cookies位置在C:\Documents and Settings\Admi...

pll的作用_pll作用_dgergeg的博客-程序员秘密

锁相环广泛应用于时钟系统设计中,其中包括相位同步以及时钟倍频等应用。通常,当芯片工作频率高于一定频率时,就需要消除由于芯片内时钟驱动所引起的片内时钟与片外时钟间的相位差,嵌入在芯片内部的PLL可以消除这种时钟延时。此外,很多芯片控制链逻辑需要占空比为50%的时钟,因此需要一个2倍于此的时钟源,集成在芯片内部的PLL可以将外部时钟合成为此时钟源。系统集成PLL可以从内部触发,

记录下抓取公众号文章wechatsogou模块报错_Reading.的博客-程序员秘密

报错信息:ModuleNotFoundError: No module named ‘werkzeug.contrib’原因:contrib模块已弃用,将werkzeug在1.0版中移入 核心或完全删除。参考官方文档地址.解决:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple Werkzeug==0.14.1...

SSH2三大框架整合出错(六)_翱翔天地的博客-程序员秘密

usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help | start | stop }2013-12-6 23:33:49 org.apache.catalina.core.AprLifecycleListener init信息: Loaded APR bas

随便推点

Android 面试之必问Android基础_xiangzhihong8的博客-程序员秘密

在上一篇文章Android 面试之必问Java基础一文中,我们介绍了Java面试的一些常见的基础面试题,下面我们来介绍Android开发的一些必问知识点。1,Activity1.1 生命周期正常情况系,Activity会经历如下几个阶段:onCreate:表示Activity正在被创建。onRestart:表示Activity正在被重新启动。onStart:表示Activity正在被启动,这时已经可见,但没有出现在前台无法进行交互。onResume:表示Activity已经可见,并且处于前台

黑马程序员——c语言学习—内存的分配与管理_qq_25842885的博客-程序员秘密

-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------ 本节简单的分析学习一下c语言中内存的的分配及管理。1、概述计算机程序的运行过程实际上就是cpu和内存之间进行数据交互的过程,而大部分计算机是存在多种不同的内存区域以适应不同的读取速度要求的,包括一级缓存、二级缓存、普通内存,虚拟内存等等。我们双击运行一个应用

SPI通信_Ai_Sj的博客-程序员秘密

目录一、简介二、SPI工作模式三、在内核添加自己的驱动文件3.1、在内核源码目录kernel/drivers/spi/中创建新的驱动文件四、定义和注册SPI设备五、定义和注册SPI驱动5.1、定义SPI驱动5.2、注册SPI驱动六、SPI读写数据过程6.1、SPI写数据:ssize_t spidev_write6.2、写同步函数:spidev_sync_write6.3、SPI读数据一、简介 1. SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双

做一个gpt程序_滚菩提哦呢的博客-程序员秘密

GPT (Generative Pre-training Transformer) 是一种自然语言生成模型,由OpenAI在2017年提出。它通过使用大量的文本数据来进行预训练,然后可以用于各种自然语言生成任务,包括机器翻译、对话生成、文档生成等。GPT 使用了一种称为 Transformer 的神经网络架构。它的主要思想是使用多个注意力层来学习输入数据之间的关系,从而生成更加合理和流畅的输出。...

GitLab-CI/CD使用介绍_南宮絶風的博客-程序员秘密

做到持续集成功能,当Gitlab服务器上的项目有任何变化时,我们需要gitlab runner自动执行一系列命令,此时需要先安装gitlab runner在目标系统上,如以下为例自动在orangepi板子的ubantu系统上执行命令。

推荐文章

热门文章

相关标签