jquery实现的缩略图预览滑块实例

下面我将详细讲解如何使用 jQuery 实现缩略图预览滑块的效果:

前置准备

在开始实现缩略图预览滑块之前,需要先引入 jQuery 库,可以通过以下方式进行引入:

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

HTML 结构

缩略图预览滑块的 HTML 结构需要包含一个大图容器和一个缩略图容器。具体结构如下:

<div class="slider-container">
  <div class="slider-large-img">
    <!-- 大图容器 -->
    <img src="large-image.jpg" alt="">
  </div>
  <div class="slider-thumb">
    <!-- 缩略图容器 -->
    <ul>
      <li><img src="thumb1.jpg" alt=""></li>
      <li><img src="thumb2.jpg" alt=""></li>
      <li><img src="thumb3.jpg" alt=""></li>
      <li><img src="thumb4.jpg" alt=""></li>
    </ul>
  </div>
</div>

CSS 样式

需要对大图容器和缩略图容器进行样式设置,使其水平排列,具体 CSS 代码如下:

.slider-container {
  display: flex;
}

.slider-large-img,
.slider-thumb {
  flex: 1;
}

.slider-thumb {
  overflow-x: auto;
  white-space: nowrap;
}

.slider-thumb ul {
  display: flex;
  list-style: none;
  margin: 0;
  padding: 0;
}

.slider-thumb li {
  margin: 0 5px;
}

.slider-thumb img {
  display: block;
  width: 100px;
  height: 60px;
  object-fit: cover;
  cursor: pointer;
}

.slider-large-img img {
  width: 100%;
  height: auto;
}

JavaScript 实现

步骤一:点击缩略图切换大图

在缩略图容器中的图片被点击时,应该获取到该图片对应的大图路径,并将大图容器中的图片的 src 属性设置为该路径,实现大图的切换。代码如下:

var thumbs = $('.slider-thumb img'); // 获取所有缩略图图片

thumbs.on('click', function() {
  var src = $(this).attr('src'); // 获取点击图片的路径
  $('.slider-large-img img').attr('src', src); // 设置大图路径
});

步骤二:缩略图容器添加滑动条

如果缩略图容器中的图片数量很多,而容器又不够大,就需要添加滑动条,让用户可以滑动查看所有的缩略图。这里可以使用 jQuery 的 scrollLeft 方法实现。

首先,需要在 CSS 中将缩略图容器的 overflow-x 属性设置为 auto,以使得它具有滚动条。

.slider-thumb {
  overflow-x: auto;
}

然后,在上面缩略图点击事件的回调函数中加入如下代码,计算出当前选中的缩略图在容器中的位置,然后将容器的 scrollLeft 属性设置为该位置,以使其自动滚动:

var thumbIndex = thumbs.index(this); // 获取当前点击缩略图的索引
var thumbWidth = thumbs.outerWidth(true); // 获取每个缩略图的宽度(包括 margin)
var thumbMarginLeft = parseInt(thumbs.eq(thumbIndex).css('marginLeft')); // 获取当前点击的缩略图的 marginLeft 值

// 计算出当前点击缩略图在容器中的位置
var thumbPos = thumbIndex * (thumbWidth + thumbMarginLeft); 

$('.slider-thumb').animate({
  'scrollLeft': thumbPos // 滚动到当前点击缩略图的位置
}, 300);

示例说明

示例一:使用 fadeInfadeOut 动画效果

在切换大图时,可以使用 jQuery 提供的 fadeInfadeOut 动画效果,使切换更加平滑。具体代码如下:

thumbs.on('click', function() {
  var $largeImg = $('.slider-large-img img');
  var src = $(this).attr('src');

  $largeImg.fadeOut(200, function() { // 淡出效果
    $largeImg.attr('src', src).fadeIn(200); // 淡入效果
  });
});

示例二:添加懒加载功能

如果缩略图数量很多,加载所有的缩略图可能会导致页面加载速度缓慢,这时候可以使用懒加载技术,只加载当前显示范围内的缩略图。

具体实现方法是,在页面加载完成时,初始化所有的缩略图都使用一个占位图片,等到用户将缩略图容器滚动到该图片之前时,再将该图片替换成真实的缩略图。具体代码如下:

var placeholder = 'https://via.placeholder.com/120x90'; // 占位图片地址

// 初始化所有缩略图都使用占位图片
thumbs.attr('src', placeholder);

$('.slider-thumb').scroll(function() { // 监听滚动事件
  var scrollPos = $(this).scrollLeft(); // 获取当前缩略图容器滚动的位置

  thumbs.each(function() { // 遍历所有的缩略图
    var $this = $(this);
    var imgPos = $this.offset().left; // 获取当前缩略图的位置
    var imgWidth = $this.outerWidth(true); // 获取当前缩略图的宽度(包括 margin)

    if (imgPos < scrollPos + imgWidth && $this.attr('src') === placeholder) { // 判断当前缩略图是否需要加载
      $this.attr('src', $this.data('src')); // 将占位图片替换成真实的缩略图
    }
  });
});

// 将所有缩略图的真实路径保存在 data-src 属性中
thumbs.each(function() {
  var $this = $(this);
  $this.data('src', $this.attr('src'));
  $this.attr('src', placeholder);
});

上述代码使用 jQuery 的 offset 方法获取了每个缩略图在页面中的位置,然后通过计算得出当前容器显示范围内的所有缩略图,将对应的占位图片替换为真实的缩略图。同时,在将所有的缩略图都使用占位图片初始化时,使用了 jQuery 的 data 方法将缩略图的真实路径保存在了 data-src 属性中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现的缩略图预览滑块实例 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • CSS实现表格首行首列固定和自适应窗口的实例代码

    下面我将详细讲解如何使用CSS实现表格首行首列固定和自适应窗口,并提供两个示例说明。 实现表格首行首列固定 要实现表格的首行和首列固定,可以使用 position 和 z-index 属性来实现。 首先,通过 CSS 将表格的第一行和第一列单独设置样式,例如: table tr:first-child { position: relative; } tabl…

    css 2023年6月10日
    00
  • jQuery判断div随滚动条滚动到一定位置后停止

    首先,我们需要了解一下jQuery中获取窗口滚动条位置的方法scrollTop(),它可以返回文档被卷起来的高度。 接下来,我们可以通过绑定窗口的scroll事件,来动态监听窗口的滚动事件,并在滚动到一定位置后停止对div的滚动事件进行监听。 以下是完整的代码实现: $(window).scroll(function() { var scrollTop = …

    css 2023年6月10日
    00
  • jquery photoFrame 图片边框美化显示插件

    jQuery photoFrame是一个可用于美化图片边框的插件,使用简单且配置灵活,支持多种不同的边框风格和效果。下面简要介绍一下如何使用该插件。 安装photoFrame插件 首先,下载 photoFrame 插件,并将其解压缩。可以直接从GitHub上下载:https://github.com/greg-j/photoframe 。解压后,得到以下文件…

    css 2023年6月10日
    00
  • 基于javascript的无缝滚动动画1

    下面是基于 javascript 的无缝滚动动画攻略: 1、需求分析 首先,我们需要明确我们要做的是一个无缝滚动的动画效果。该效果可以让用户通过鼠标滑轮或手势轻松地左右滑动页面,并且当滑动到页面边缘时会循环滚动,保证用户可以持续无感知地查看页面内容。 2、技术实现 实现无缝滚动的动画效果,可以使用以下技术来完成: 2.1 CSS3动画 可以使用 CSS3 的…

    css 2023年6月10日
    00
  • Mootools 图片展示插件(lightbox,ImageMenu)收集集合

    Mootools 是一个功能强大的 JavaScript 框架,提供了丰富的 UI 组件,其中包括图片展示插件。在本文中,我们将为大家分享两种 Mootools 图片展示插件:lightbox 和 ImageMenu,并提供完整的攻略。 1. Lightbox Lightbox 是一款非常流行的基于 Mootools 的图片展示插件,它可以在当前页面内展示大…

    css 2023年6月10日
    00
  • jb51站长推荐的用js实现的多浏览器支持的图片轮换展示效果ie,firefox

    实现多浏览器支持的图片轮换展示效果并不难,下面是实现的步骤: 定义HTML结构和CSS样式 要实现多图片轮换展示效果,我们需要先定义一个包含图片和指示器 (indicator) 的结构。指示器指的是图片轮换时底部圆点的样式。代码如下所示: <div class="carousel"> <div class="s…

    css 2023年6月11日
    00
  • Vue3新特性之在Composition API中使用CSS Modules

    下面是针对“Vue3新特性之在Composition API中使用CSS Modules”的完整攻略。 什么是CSS Modules? CSS Modules是一种流行的CSS样式处理器,它允许我们将CSS代码限定在组件范围内,从而避免了样式之间的污染和覆盖。 在CSS模块中,样式类名不是全局的,而是局部的,通过这种方式,我们能够在写CSS样式代码时避免影响…

    css 2023年6月9日
    00
  • 详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)

    Markdown 格式是一种轻量级的标记语言,用起来可以快速简洁地写出漂亮的排版。不过它并不是专门为 web 设计而设计的,而我们在编写网站的时候,所需要的样式效果却远不止于此。其中一条常用的样式效果就是overflow:hidden,下面我将会介绍这个样式效果的作用以及用法。 什么是 overflow:hidden? overflow:hidden是一种 …

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部