美文网首页
轮播图根据图片底色自动填充剩余背景色

轮播图根据图片底色自动填充剩余背景色

作者: IT姑凉 | 来源:发表于2020-07-28 19:40 被阅读0次

项目中用的是 Ant Design ProCarousel 轮播组件

1、需求

需要实现一个类似腾讯课堂的轮播图, 图片定宽定高, 不同分辨率屏幕时,轮播图会根据图片的背景色填充容器左右空隙

比如 1800px 屏:

比如 3000px 屏:

可以通过开发者工具看到,图片还是那张图片,容器背景色填充

2、实现

思路:轮播切换时,利用 canvasgetImageData 方法获取颜色,然后填充背景色。适用于背景色为纯色的需求,因为获取的是左上角的颜色

样式:

.carousel{
    height: 250px;
    overflow: hidden;
    .carouselItem{
      text-align: center;
      width: 100%;
      height: 250px;
      img{
        max-height: 250px;
        margin: 0 auto;
        border: 5px solid;
      }
    }
}

实现:

class Demo extends PureComponent {

  constructor(props) {
    super(props);
    this.state = {
      bgColor: "",
      imgList: [{
        id:"img111",
        url:"/img111.png"
      },{
        id:"img222",
        url:"/img222.png"
      },{
        id:"img333",
        url:"/img333.png"
      }],
    };
  }
  drawBannerBg(index) {
    var c = document.getElementById("myCanvas");
    var ctxt = c.getContext("2d");
    var img = document.getElementById(this.state.imgList[index].id).children[0];
    ctxt.drawImage(img, 0, 0);
    var data = ctxt.getImageData(0, 0, 1, 1).data;
    this.setState({
      bgColor: "rgba(" + data.toString() + ")",
    });
  }
  onChange = (oldIndex, newIndex) => {
    newIndex = newIndex < 0 ? 0 : newIndex;
    this.drawBannerBg(newIndex);
  }
  componentDidMount() {
    const { dispatch } = this.props;
    var that = this;
    var c = document.getElementById("myCanvas");
    var ctxt = c.getContext("2d");
    var img = new Image;
    img.src = this.state.imgList[0].url;
    img.onload = function () {
      ctxt.drawImage(img, 0, 0);
      var data = ctxt.getImageData(0, 0, 1, 1).data;
      that.setState({
        bgColor: "rgba(" + data.toString() + ")",
      });
    }
  }
  render() {
    const { bgColor,imgList } = this.state;
    return (
      <div>
        <div className={styles.carousel}>
          <Carousel autoplay className={styles.carouselItem} beforeChange={this.onChange}>
            {imgList.map(item => {
              return (<div><div id={item.id} key={item.id} style={{ background: bgColor }}>
                <img src={item.url}/>
              </div></div>);
            })}
          </Carousel>
          <canvas id={"myCanvas"}></canvas>
        </div>
      </div>
    );
  }
}
export default Demo;

3、效果

方便查看效果特意加了边框,边框内为图片,边框外为填充颜色

1800px 屏:

3000px 屏:

相关文章

  • 轮播图根据图片底色自动填充剩余背景色

    项目中用的是 Ant Design Pro ,Carousel 轮播组件 1、需求 需要实现一个类似腾讯课堂的轮播...

  • 轮播图

    最终效果图 效果说明: 运行后六张图片自动轮播,同时下方对应的小矩形背景色变蓝。 当鼠标停放在图片上时,图片轮播动...

  • swif_播图

    轮播图 实现图片自动翻转(UIViewController,UIScrollViewDelegate,Timer)

  • 状态栏

    背景色 最完美的应该是根据状态栏附近的颜色,自动填充生成背景色,整体画面才和谐 参考链接

  • 原生Js的三个demo

    轮播图(左右轮播) 1.实现功能:  - 鼠标不在图片上方时进行自动轮播,并且箭头不会显示,当鼠标放在图片上方时停...

  • 传统&呼吸 轮播

    传统的轮播图 一个 carousel 轮播图,图片实现自动轮播,可以左右按钮播放,点小圆点也能实现换图。同时设置节...

  • 自动滑动控件AutoScrollViewPager

    支持自动滑动的ViewPager控件, 可以用于广告图轮播, 但不限于图片轮播, 该控件继承了ViewPager的...

  • 个人博客—轮播器

    个人博客—轮播器 轮播器自动轮播,每张图片淡入淡出 控制按钮和图片描述跟随图片轮播 鼠标悬停图片上方则停止轮播,滑...

  • web前端学习基础教程,简单的图片旋转木马自动轮播js代码

    一款简单的图片旋转木马自动轮播js代码,图片叠加轮播切换效果,支持点击左右箭头按钮控制切换。 案例效果图 案例源码...

  • iOS无限轮播图 无限复用

    关于轮播图的实现, zz所了解到的有三种: 利用scrollView根据轮播图片的多少来创建imageview 然...

网友评论

      本文标题:轮播图根据图片底色自动填充剩余背景色

      本文链接:https://www.haomeiwen.com/subject/uwrhlktx.html