【日常记录】【插件】使用ColorThief,跟随图片变化改变网页背景

文章目录

    • 1、效果图
    • 2、ColorThief
    • 3、实现
    • 4、参考链接

1、效果图

在这里插入图片描述

想要实现,界面的背景颜色,跟随图片的 颜色来进行展示,

2、ColorThief

在这里插入图片描述

要想实现跟随图片变化实现网页背景渐变效果,则需要获取图片的主要颜色,可以使用ColorThief库来获取图片的颜色

在这里插入图片描述

需要注意:getPalette和 getColor 方法在node 环境会返回一个promise
方法介绍

  • getColor:获取图片的主色调,会返回一个数组,长度为3,这三项分别是 rgb的值
getColor(image [, quality])
Returns: [Number, Number, Number]

image:如果是浏览器环境就是,HTML image element;如果是node环境就是图片的路径,不建议是url,可能会有跨域风险
quality:是质量,是一个可选参数,必须是值为 1 或更大的 Integer,默认为 10。该数字决定了在对下一个像素进行采样之前跳过的像素数。我们很少需要对图像中的每个像素进行采样才能获得良好的结果。数字越大,值的返回速度就越快
  • getPalette:获取这个图片的主要的颜色信息,返回值是二维数组
getPalette(image [, colorCount, quality]
Returns: [[Number, Number, Number], ...]

第二个参数是个数,你需要几个颜色,就是几

node环境

  1. 安装依赖,npm i --save colorthief
  2. 引入,const ColorThief = require('colorthief');
  3. 获取颜色
const img = resolve(process.cwd(), 'rainbow.png');

ColorThief.getColor(img)
    .then(color => { console.log(color) })
    .catch(err => { console.log(err) })

ColorThief.getPalette(img, 5)
    .then(palette => { console.log(palette) })
    .catch(err => { console.log(err) })

3、实现

浏览器环境

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    html {
      background-image: linear-gradient(to bottom, var(--color1), var(--color2));
      background-repeat: no-repeat;
      height: 100%;
    }

    .box {
      display: grid;
      grid-template-rows: repeat(2, 200px);
      grid-template-columns: repeat(2, 200px);
      grid-gap: 20px;
      margin: 0 auto;
      width: 500px;
      height: 500px;
    }

    img {
      transition: all .4s;
    }

    .box img:hover {
      transform: scale(1.2);
    }
  </style>
</head>

<body>
  <div class="box">
    <img src="./images/img1.jpg" alt="">
    <img src="./images/img2.jpg" alt="">
    <img src="./images/img3.jpg" alt="">
    <img src="./images/img4.jpg" alt="">
  </div>
  <script src="https://cdn.bootcdn.net/ajax/libs/color-thief/2.4.0/color-thief.umd.js"></script>
  <script>
    const colorThief = new ColorThief()    // 创建ColorThief的实例对象

    let imgsEl = document.querySelectorAll('img');
    imgsEl.forEach(el => {
      el.addEventListener('mouseover', function ({ target }) {
        console.log('鼠标移入', target);
        // 第一个参数是图片元素,或者url,第二个参数是 需要提取颜色的个数
        // 返回值是一个二维数组
        const colors = colorThief.getPalette(target, 2)
        colors.forEach((item, index) => {
          document.documentElement.style.setProperty(`--color${index + 1}`, `rgb(${item[0]}, ${item[1]}, ${item[2]})`)
        })

      })
    })
  </script>
</body>

</html>

4、参考链接

  • ColorThief 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/274084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDK1.8超详细安装教程

1、下载jdk1.8 大家可以直接去百度云盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/187N6CU9Gu4bjtOz5_cjd-A?pwd3535 提取码&#xff1a;35352、开始安装 双击下载好的.exe文件&#xff0c;点击下一步 修改安装路径&#xff0c;点击下一步 会顺带安装jre…

Json Web Token(JWT) 快速入门

推荐视频&#xff1a;【从零开始掌握JWT】 目录 第一章 会话跟踪 01 使用Cookie和Session&#xff0c;jsessionid 02 使用token 例子一&#xff1a;自定义token 例子二&#xff1a;使用redis存储token 第一章 会话跟踪 应用背景 &#xff1a;浏览器访问web应用&#xff…

Android 13 源码编译及报错修复

下载AOSP指定分支 repo init -u git://aosp../platform/manifest -b android-13.0.0_r83 同步代码到本地 repo sync -c 初始化编译环境, 选择构建目标 source build/envsetup.sh lunch 选择需要构建的目标&#xff0c;此处以aosp_arm64-eng为例 进行固件编译 make -j12 期间编译…

【C++庖丁解牛】继承的概念及定义 | 继承中的作用域 | 继承与友元继承与静态成员 | 复杂的菱形继承及菱形虚拟继承

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.继承的概念及定义1.1继…

Ubuntu双系统/home分区扩容

一、Windows系统中利用磁盘管理分出空闲区域&#xff0c;如果多就多分一些 二、插入安装Ubuntu的U盘启动盘&#xff0c;lenovo电脑F12&#xff08;其他电脑可选择其他类似方式&#xff09;选择U盘启动项&#xff0c;然后选择ubuntu&#xff0c;出现安装界面&#xff0c;再选择t…

clipboard好用的复制剪切库

clipboard是现代复制到剪贴板的工具&#xff0c;其 gzip 压缩后只有 3kb&#xff0c;能够减少选择文本的重复操作&#xff0c;点击按钮就可以复制指定内容&#xff0c;支持原生HTMLjs&#xff0c;vue3和vue2。使用方法参照官方文档&#xff0c;so easy&#xff01;&#xff01;…

springcloud gateway

一、 predicate : 就是你定义一些规则&#xff0c;如果满足了这些规则&#xff0c;就去找到对应的路由。 对于strip 二、自定义过略器和全局过滤器 约定大于配置&#xff0c;后缀不变&#xff0c;只改前缀 sentinel持久化 三、sentinel quick-start | Sentinel 信号量虽然简…

RPC 和 序列化

RPC 1 RPC调用流程 1.1 clerk客户端调用远程服务 Clerk::PutAppend() raftServerRpcUtil::PutAppend() raftServerRpcUtil是client与kvserver通信的入口&#xff0c; 包含kvserver功能的一对一映射&#xff1a;Get/PutAppend&#xff0c;通过stub对象——raftKVRpcProctoc:…

【系统架构师】-第19章-大数据架构设计理论与实践

四个特点&#xff1a; 大规模&#xff08;Volume&#xff09;、高速度&#xff08;Velocity&#xff09;和多样化&#xff08;Variety&#xff09;&#xff0c;价值&#xff08;Value&#xff09;。 五个问题&#xff1a; 异构性&#xff08;Heterogeneity&#xff09;、规模…

STP环路避免实验(思科)

华为设备参考&#xff1a;STP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 Spanning Tree Protocol&#xff08;STP&#xff09;&#xff0c;即生成树协议&#xff0c;是一种数据链路层协议。主要作用是防止二层环路&#xff0c;并自适应网络变化和故障…

代码随想录day20(2)二叉树:完全二叉树节点个数(leetcode222)

题目要求&#xff1a;求一个完全二叉树的节点个数 思路&#xff1a;首先完全二叉树可以用普通二叉树的方法来求&#xff0c;但是需要遍历所有的节点。 但是对于完全二叉树来说&#xff0c;只有最底层右侧的节点可能没满&#xff0c;其余每层节点都达到了最大值。所以我们可以…

Spring启动“--”设置参数没生效

现象 在idea中启动SpringBoot项目时&#xff0c;使用“--”设置的启动参数没有生效&#xff0c;如修改端口号“--server.port8082” 原因 排查发现是因为在使用SpringApplication.run启动项目时&#xff0c;没有将args参数传入run方法。 修复方案 SpringApplication.run参数中…

想要通过湖北建筑安全员ABC考试?这5个技巧助你一臂之力!

想要通过湖北建筑安全员ABC考试&#xff1f;这5个技巧助你一臂之力&#xff01; 2024年湖北建筑安全员ABC报名考试通过率 关于湖北省建筑安管人员考核管理系统考核通过率不是很固定&#xff0c;或高或低。安全员ABC测试有合格分数线&#xff0c;交卷后30分钟即可查询你的成绩…

RSA加密解密签名加签验签RsaUtils工具类

RSA加密解密RsaUtils工具类题 引言一、RsaUtils工具类代码二、优点三、缺点四、声明 引言 RSA算法基于大数因子分解难题&#xff0c;提供了公钥加密和私钥解密的能力。公钥用于加密&#xff0c;私钥则负责解密。这种特性使得RSA成为保证数据传输安全的理想选择。 公钥加密私钥…

106 基于消息队列来做 mysql 大数据表数据的遍历处理

前言 最近有这样的一个需求, 我们存在一张 很大的 mysql 数据表, 数据量大概是在 六百万左右 然后 需要获取所有的记录, 将数据传输到 es 中 然后 当时 我就写了一个脚本来读取 这张大表, 然后 分页获取数据, 然后 按页进行数据处理 转换到 es 但是存在的问题是, 前面 还…

尚硅谷SpringBoot3笔记 (二) Web开发

Spring Boot Web开发&#xff1a;24.Web开发-自动配置原理_哔哩哔哩_bilibili 1. Web场景 1.1 自动配置 整合web场景&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId&g…

php便民超市管理系统flask-django-nodejs-python

随着时代的变迁&#xff0c;超市管理系统软件使用的普及【1】&#xff0c;以上所有的问题&#xff0c;都是为它而打造的&#xff0c;现在不仅是开一家店容易管理&#xff0c;开多家店页变得容易很多&#xff0c;同时它的出现也可以为本店起到宣传的作用。 21世纪的今天&#…

cc-uploadSomePic图片上传组件:快速开发与用户体验的提升

cc-uploadSomePic图片上传组件&#xff1a;快速开发与用户体验的提升 摘要&#xff1a; 在前端开发中&#xff0c;图片上传功能是一个常见的需求。为了提高开发效率和用户体验&#xff0c;我们开发了一个名为cc-uploadSomePic的图片上传组件。该组件支持单个或多个文件上传&am…

计算机网络——物理层(物理传输介质和物理层的设备)

计算机网络——物理层&#xff08;物理传输介质和物理层的设备 物理传输介质导向性传输介质双绞线同轴电缆光纤 非导向性传输介质无线电波多径效应 微波地面微波通信ISM 频段 卫星通信 物理层设备中继器集线器中继器和集线器的区别 我们今天进入物理层的物理传输介质和物理层的…

阿里云部署MySQL、Redis、RocketMQ、Nacos集群

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能&#xff08;ESSD&#xff09; 镜像选择带宽选择密码配置注意事项 搭建宝塔面板方便管理云服务器云服务器的安全组安装docker和docker-compose…
最新文章