根据 轮播图背景色 自动填充剩余背景色的 走马灯

起因

今天产品经理过来说,需要在首页加上一个类似一个天猫的轮播图。
天猫的轮播图是 图片定宽定高, 当不同分辨率屏幕时候 会根据图片的背景色填充容器左右空隙。 比如
1800px屏:

3000px屏:

第一反应:不管是js还是css 都没有办法获取图片色值的, 那必须服务端给我了。要么 后台cms在上次图片的时候,指定好背景色, 要么服务端调用图片api获取背景色然后给我。

天猫应该是这么做的。

AutoImg

纯前端的话, 有么有办法获取色值呢? 突然想到,之前做WebGL贴纹理的时候, 在片元着色器里是可以获取到图片每一个像素点的色值的。 用WebGL肯定是太大了, canvas可以吗? 查询了一下是可以的,有方法的getImageData。 那么至少说明了纯前端的做饭是可行的。 我们先实现一个组件AutoImg,AutoImg中的img 定高定宽, 容器的背景色用img的背景色填充。

export default class AutoImg extends Component {static propTypes = {height: PropTypes.number.isRequired,width: PropTypes.number.isRequired,source: PropTypes.number.isRequired,}componentDidMount() {this.setImg(this.props.source)}componentWillReceiveProps(nextProps) {if (nextProps.source !== this.props.source) {this.setImg(nextProps.source)}}setImg(source) {const { width, height } = this.propsconst ima = new Image()ima.src = sourceima.crossOrigin = '' // 处理跨域图片ima.onload = () => {const ctx = this.canva.getContext('2d')ctx.drawImage(ima, 0, 0, width, height)const [r, g, b, a] = ctx.getImageData(0,0,1,1).data; // 获取背景色this.inner.style.background = `rgba(${r}, ${g}, ${b}, ${a})`}}render() {const { width, height } = this.propsreturn (<div ref={inner => this.inner = inner}><canvasstyle={{display: 'block',margin: '0 auto'}}width={`${width}px`}height={`${height}px`}ref={canva => this.canva = canva}></canvas></div>)}
}

这里 考虑到getImageData 参数是整形, 所有要求width, height必须是number类型,1000代表1000px

github
npm:
npm install rc-autoimg --save

轮播

轮播我们就不造轮子了,直接使用nuka-carousel。

import Carousel from 'nuka-carousel'default class Banner extends Component {render() {const bannerImgList = ['https://img.alicdn.com/tps/i4/TB1yqAhcpmWBuNjSspdSuvugXXa.jpg','https://img.alicdn.com/tps/i4/TB1XVCsaTdYBeNkSmLySutfnVXa.jpg','https://img.alicdn.com/simba/img/TB1ror0cf5TBuNjSspcSuvnGFXa.jpg','https://img.alicdn.com/tfs/TB1ed2lggmTBuNjy1XbXXaMrVXa-1130-500.jpg_q100.jpg_.webp',]return (<div className={styles.banner}><Carouselautoplay={true}>{bannerImgList.map(source => (<div key={source}><AutoImgwidth={1200}height={340}source={source}/></div>))}</Carousel></div>)}
}

2500px 效果:

结语

兼容性 > IE9
或许你也有这种轮播需求,如果没有希望提取颜色的地方,可以启发到你。


根据 轮播图背景色 自动填充剩余背景色的 走马灯相关推荐

  1. 双向箭头轮播图html,根据 轮播图背景色 自动填充剩余背景色的 走马灯

    起因 今天产品经理过来说,需要在首页加上一个类似一个天猫的轮播图. 天猫的轮播图是 图片定宽定高, 当不同分辨率屏幕时候 会根据图片的背景色填充容器左右空隙. 比如 1800px屏: 3000px屏: ...

  2. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】

    Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...

  3. 怎样实现banner自动播放html,纯css实现轮播图banner自动轮换效果

    话不多说 直接上代码 * { margin: 0; padding: 0; } .container { margin:300px auto; height: 400px; width: 1146px ...

  4. 老徐WEB:JS简单实现图片滚动效果轮播图,自动、手动和自适应(二)

    轮播图是前端网页中常用的功能,包括PC端和移动端,都会用到轮播图,像咨讯.电商和个人博客等,首页基本都会有轮播图. 老徐在上一篇文章的基础上[最简单详细的轮播图原理和制作过程],又扩展了功能,使之成为 ...

  5. js原生选项卡(自动播放无缝滚动轮播图)二

    今天分享一下自动播放轮播图,自动播放轮播图是在昨天分享的轮播图的基础上添加了定时器,用定时器控制图片的自动切换,函数中首先封装一个方向的自动播放工能的小函数,这个函数中添加定时器,定时器中可以放向右走 ...

  6. Vuetify Carouse轮播图 图片切换导致页面总是自动跳转到轮播图位置

    文章目录 begin !!! Solution1 Solution2 end begin vuetify carouse轮播图 的图片自动切换的时候, 会自动聚焦跳转到轮播图自身的位置. 这导致了一个 ...

  7. 轮播图功能的全实现(自动播放、小点点、按住停止播放、放手后开始播放...)

    MainActivity /*** 1.实现了轮播图自动滚动效果<br>* 2.设置了跟随页面变化的小点点<br>* 3.解决了轮播图手指滑动后,显示页面错位的问题<br ...

  8. html5圆形图片轮播,jQuery超酷响应式圆形图片轮播图特效

    mislider是一款效果非常酷的jQuery响应式圆形图片轮播图特效插件.该轮播图特效可以将图片以圆形图片显示,然后使图片无限循环形成轮播图或旋转木马特效.该轮播图插件的特点有: 使用简单 在同一个 ...

  9. 功能整合(二):轮播图(可控)、事件流

    1.轮播图 可实现: 自动轮播(加载完成后调用定时器).鼠标移入停止(停止定时器).鼠标移出开始(开始定时器),点击切换(点击事件) 1 window.onload = function(){ 2 / ...

  10. 原生js实现轮播图实例教程

    原生js实现轮播图实例教程 本实例效果如下图所示: 根据实例效果,需要的元素有图片.中间圆点按钮.左右箭头按钮等.实际html代码如下所示: <div class="banner_co ...

最新文章

  1. 每年颁发两个图灵奖?
  2. 【数理知识】《矩阵论》方保镕老师-第5章-矩阵微积分及其应用
  3. ADN中国队参加微软Kinect他赢得了全国比赛三等奖,我们的创意项目与团队Kinect于Naviswork虚拟之旅...
  4. 四五月份:关键词是沟通、绘画和SQL
  5. ARM 汇编语言入门
  6. java显示目录文件列表和删除目录
  7. python表示数字6_Python3 数字Number(六)
  8. 英语总结系列(二十二):Baby偶遇GCT
  9. (一)UI设计的一些常识
  10. java--GUI窗口可视化编程1
  11. 龙芯pmon快速启动方法
  12. 巨人肩膀上的迁移学习(2)---图像回归
  13. C语言实现图片找茬,[创意心得]大家来找茬(C语言)
  14. blk-mq 进行多重队列
  15. 每次开机都要按F1的解决办法
  16. 自然语言处理之新手上路
  17. js 数组扁平化和树之间相互转换
  18. Webpack项目中引入Bootstrap4.x
  19. Java社招最全面试题,成功收获美团,小米offer
  20. 在S3C6410开发板上的LED驱动程序

热门文章

  1. 苹果电脑重装系统步骤
  2. 【滤波器】最小均方(LMS)自适应滤波器
  3. FlashBuilder 4.6破解方法
  4. 如何用excel计算断色断码_各位小姐姐、小哥哥都是怎么用Excel计算断码率的指标?...
  5. PTES渗透测试执行标准
  6. Win10家庭中文版 如何启用组策略
  7. Origin 2017安装教程(附有下载链接)
  8. Python制作PPT周报
  9. BatchOutput PDF 2.2.32 Mac 破解版 PDF文档自动批量打印工具
  10. [信号]预加重与去加重--转