热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React完成一个图片轮播组件

欲实现的图片轮播组件的功能:1.图片组件分为中图和小图两个部分;中图和小图图片宽度可定制化;2.中图部分:点击向左或者向右箭头能切换图片(非循环轮播),同时小图对应的图片高亮显示;

欲实现的图片轮播组件的功能:
1.图片组件分为中图和小图两个部分;中图和小图图片宽度可定制化;
2.中图部分:

  • 点击向左或者向右箭头能切换图片(非循环轮播),同时小图对应的图片高亮显示;

  • 由于是非循环轮播,所以第一张中图和最后一张中图向左向右箭头分别不可见;

  • 中图右下角展示图片进度(例:10/19)

3.小图部分:

  • 点击小图部分的向左向右箭头可切换小图的分页;

  • 同样,小图第一页和最后一页,向左和向右箭头不可见;

  • 点击小图,大图能切换到对应的图片;

效果图如下:
《React完成一个图片轮播组件》

使用React实现上述功能,首先,划分组件:




组件SlideM代表中图组件,其始终维护一个state: currentMIndex,即当前的中图图片的index值。
组件SlideS代表小图组件,要维护两个state: currentSIndex,currentSPage, 即当前的小图图片的index值和小图当前的页数;

外层组件SlideMS 接受几个参数作为props:

mediumImageArr={mediumImageArr}
eachMediumImgWidth = {616}
smallImageArr={smallImageArr}
eachSmallImgWidth = {82}
/>, document.getElementById('js-img-slide'));

SlideM、SlideS再从SlideMS中获取参数进行内部渲染。

mediumImageArr={mediumImageArr}
currentMIndex={currentMIndex}
eachMediumImgWidth = {eachMediumImgWidth}
callback={(index)=>{self.setSmallIndex(index)}}
/>
smallImageArr={smallImageArr}
currentSIndex={currentSIndex}
eachSmallImgWidth={eachSmallImgWidth}
eachMediumImgWidth = {eachMediumImgWidth}
callback={(index)=>{self.setMediumIndex(index)}}
/>

当点击中图的切换按钮时,计算图片偏移量,然后将新的currentMIndex传递给父组件,父组件setState通知两个子组件currentMIndex发生了改变;

小图组件中涉及的计算比较多,可以将这些抽成方法,例如:根据给定的中图宽度计算一页有几张小图、计算小图总页数、根据给定的index值判断小图处于当前哪一页等。

当点击小图组件的左右箭头时,计算图片的偏移量(首先计算一张中图里有几张小图),然后setState修改小图currentSPage的值。父组件setState通知两个子组件currentMIndex发生了改变;

中图、小图组件分别在componentWillReceiveProps 里接收到了新的值的改变后,重新setState,更新组件内部的state,就实现了两者之间的通信。

以上是实现的一个思路。在实际应用中,场景会复杂一些,例如,第一张图片可能存在播放视频的需求,还有当点击中图图片时,能切换到大图模式,大图模式下能正常轮播,并且在关闭大图模式时,中图和小图自动定位到刚才最后一张浏览的图片。这时会涉及稍微复杂一些的运算,需要在此基础上做一下兼容。

非常尴尬的一点:图片轮播时的动画效果,依旧使用了jquery的animate. ?


推荐阅读
  • 本文详细介绍了 jQuery 的入门知识与实战应用,首先讲解了如何引入 jQuery 库及入口函数的使用方法,为初学者提供了清晰的操作指南。此外,还深入探讨了 jQuery 在实际项目中的多种应用场景,包括 DOM 操作、事件处理和 AJAX 请求等,帮助读者全面掌握 jQuery 的核心功能与技巧。 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 在深入研究 React 项目的过程中,特别是在探索 react-router 源码时,我发现了其中蕴含的中间件概念。这激发了我对中间件的进一步思考与整理。本文将详细探讨 Redux 中间件的原理及其在实际项目中的应用,帮助读者更好地理解和使用这一强大工具。通过具体示例和代码解析,我们将揭示中间件如何提升应用的状态管理和异步操作处理能力。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 在HTML5应用中,Accordion(手风琴,又称抽屉)效果因其独特的展开和折叠样式而广泛使用。本文探讨了三种不同的Accordion交互效果,通过层次结构优化信息展示和页面布局,提升用户体验。这些效果不仅增强了视觉效果,还提高了内容的可访问性和互动性。 ... [详细]
  • 《精通 jQuery》第六章:深入解析与实战应用
    《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
  • 如何在ES6中实现Promise的完整流程
    在ES6中,Promise是一种用于处理异步操作的数据结构,它代表了一个现在、将来或永远可能可用的结果。本文将详细介绍如何在ES6中实现Promise的完整流程,包括创建、链式调用、错误处理等关键步骤,帮助开发者更好地理解和应用这一重要的异步编程工具。 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
author-avatar
捡耙活哟752
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有