微信小程序中slider实现拾色器功能

2023-11-02

微信小程序中slider实现拾色器功能

思路

画板中要实现颜色选择功能,几经周折,效果还可以,整个思路就是:
1、利用线性过渡实现slider背景渲染
2、获取slider滑块value值
3、计算该value值所代表的颜色值并赋值给颜色需求方

效果图

在这里插入图片描述

体验

体验路径:自定义系列>拾色器
在这里插入图片描述

代码

js部分

// pages/colorPicker/colorPicker.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    blockColor: "#000000",
    colorGamut:"-webkit-linear-gradient(left, #ffffff 0%, #ff0000 100%)",
    colorGray:"-webkit-linear-gradient(left, #000000 0%, #ffffff 100%)",
    colorGamutTip:"#ff0000",
    colorGrayTip:"#ffffff",
    colorValue:0,
    colorGamutValue:0,
    colorGrayValue:0,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  },

  changeCorlor(e) {
    var value = e.detail.value
    var colors = []
    if (value >= 0 && value < 17) {
      colors = this.gradientColors("#ff0000", "#ffff00", 17, 2.2)
      value = value
    } else if (value >= 17 && value < 33) {
      colors = this.gradientColors("#ffff00", "#00ff00", 17, 2.2)
      value = value - 17
    } else if (value >= 33 && value < 50) {
      colors = this.gradientColors("#00ff00", "#00ffff", 17, 2.2)
      value = value - 33
    } else if (value >= 50 && value < 67) {
      colors = this.gradientColors("#00ffff", "#0000ff", 17, 2.2)
      value = value - 50
    } else if (value >= 67 && value < 83) {
      colors = this.gradientColors("#0000ff", "#ff00ff", 17, 2.2)
      value = value - 67
    } else {
      colors = this.gradientColors("#ff00ff", "#ff0000", 17, 2.2)
      value = value - 83
    }
    if (value >= colors.length) {
      value = value - 1
    }
    this.setData({
      colorValue:value,
      colorGamutTip: colors[value],
      colorGamut: "-webkit-linear-gradient(left, #ffffff 0%," + colors[value] + " 100%)"
    })

    var colorGamuts=[]
    colorGamuts = this.gradientColors("#ffffff", this.data.colorGamutTip, 100, 2.2)
    this.setData({
      colorGrayTip: colorGamuts[this.data.colorGamutValue],
      colorGray: "-webkit-linear-gradient(left, #000000 0%," + colorGamuts[this.data.colorGamutValue] + " 100%)"
    })


    var colorGrays=[]
    colorGrays = this.gradientColors("#000000",this.data.colorGrayTip,100,2.2)
    this.setData({
      blockColor:colorGrays[this.data.colorGrayValue]
    })
  },
  changeCorlorGamut(e){
    var value = e.detail.value
    var colorGamuts = []
    colorGamuts = this.gradientColors("#ffffff", this.data.colorGamutTip, 100, 2.2)
    if (value >= colorGamuts.length) {
      value = value - 1
    }
    this.setData({
      colorGamutValue:value,
      colorGrayTip: colorGamuts[value],
      colorGray: "-webkit-linear-gradient(left, #000000 0%," + colorGamuts[value] + " 100%)"
    })

    var colorGrays = []
    colorGrays = this.gradientColors("#000000", this.data.colorGrayTip, 100, 2.2)
    this.setData({
      blockColor: colorGrays[this.data.colorGrayValue]
    })
  },
  changeCorlorGray(e){
    var value = e.detail.value
    var colorGrays = []
    colorGrays = this.gradientColors("#000000", this.data.colorGrayTip, 100, 2.2)
    if (value >= colorGrays.length) {
      value = value - 1
    }
    this.setData({
      colorGrayValue:value,
      blockColor: colorGrays[value],
    })
  },
  
  parseColor: function (hexStr) {
    return hexStr.length === 4 ? hexStr.substr(1).split('').map(function (s) {
      return 0x11 * parseInt(s, 16);
    }) : [hexStr.substr(1, 2), hexStr.substr(3, 2), hexStr.substr(5, 2)].map(function (s) {
      return parseInt(s, 16);
    })
  },

  // zero-pad 1 digit to 2
  pad: function (s) {
    return (s.length === 1) ? '0' + s : s;
  },

  gradientColors: function (start, end, steps, gamma) {
    var i, j, ms, me, output = [],
      so = [];
    gamma = gamma || 1;
    var normalize = function (channel) {
      return Math.pow(channel / 255, gamma);
    };
    start = this.parseColor(start).map(normalize);
    end = this.parseColor(end).map(normalize);
    for (i = 0; i < steps; i++) {
      ms = i / (steps - 1);
      me = 1 - ms;
      for (j = 0; j < 3; j++) {
        so[j] = this.pad(Math.round(Math.pow(start[j] * me + end[j] * ms, 1 / gamma) * 255).toString(16));
      }
      output.push('#' + so.join(''));
    }
    return output;
  }
})

wxml部分

<view class="view-color-slider">
  <view style="width:160rpx;height:160rpx;border-radius:80rpx;background:{{blockColor}}"></view>
  <slider class="slider-color-picker" style="width:500rpx;height:30rpx;border-radius:10rpx;margin-left:30rpx" activeColor="transparent" backgroundColor="transparent" bindchange="changeCorlor" block-size="24" value="{{sliderValue}}"></slider>
  <slider class="slider-color-picker-gamut" style="width:500rpx;height:30rpx;border-radius:10rpx;margin-left:30rpx;background:{{colorGamut}}" activeColor="transparent" backgroundColor="transparent" bindchange="changeCorlorGamut" block-size="24" value="{{sliderValue}}"></slider>
  <slider class="slider-color-picker-gray" style="width:500rpx;height:30rpx;border-radius:10rpx;margin-left:30rpx;background:{{colorGray}}" activeColor="transparent" backgroundColor="transparent" bindchange="changeCorlorGray" block-size="24" value="{{sliderValue}}"></slider>
</view>

css部分


.view-color-slider{
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.slider-color-picker{
  background: -webkit-linear-gradient(left, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);
  border: 1px solid gainsboro;
}
.slider-color-picker-gamut{
  border: 1px solid gainsboro;
}
.slider-color-picker-gray{
  border: 1px solid gainsboro;
}

效果体验

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序中slider实现拾色器功能 的相关文章

  • 测试工程师进阶面试题目大合集

    很多软件测试工程师在面试的时候都会遇到考官给的各种各样的面试题 这也反应了测试工程师对企业的重要性 面试通常分为以下几个方面 由于篇幅有限 在这里就只给大家分享一些比较常见的问题 一 自我介绍 这里我不分享如何自我介绍 比我话术之类 相信大
  • STM32的485

    文章目录 RS232 COM接口 232通信 232电平 传输距离 RS485 485电平 RS485的两个电阻 RS485连接方式 SP3485芯片 485通信实验 实验介绍 Rs485 h Rs485 c 先初始化端口 串口和中断 F4
  • Discuz!应用中心安装插件显示数据下载错误(105/102)的解决方法

    Discuz 应用中心安装插件的时候最后提示数据下载错误 105 或数据下载错误 102 的问题 搜索了下看见很多站长反馈这个问题 出现类似的错误主要原因是服务器和应用中心连接出现问题 可以从以下3点去排查 1 云平台需要保证正常 所以先看
  • SAT (Separating Axis Theorem)

    Skip to content Home Download GitHub Maven Central About News Documentation Getting Started FAQ Samples Advanced Joints
  • jenkins中findbugs插件检测规则配置

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 近期项目中在jenkins自动构建基础上引入了findbugs进行代码检测 藉以发现项目中隐藏的一些问题 部署使用后发现一些bug是项目中不需要去修改的 众所周知在ecli
  • 注意力评分函数(掩蔽softmax操作,加性注意力,缩放点积注意力)

    将注意力汇聚的输出计算可以作为值的加权平均 选择不同的注意力评分函数会带来不同的注意力汇聚操作 当查询和键是不同长度的矢量时 可以使用可加性注意力评分函数 当它们的长度相同时 使用缩放的 点 积 注意力评分函数的计算效率更高 注意力汇聚 N

随机推荐

  • 蓝桥杯基础试题汇总

    目录 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积 8 试题 基础
  • 北京工作单身,老家江西,90年水瓶男,无人驾驶公司从事研发工作

    对面走过来一个人 你撞上了那就是爱情 人生就是在走一条长长的路 我不知道它有没有终点 但我知道我会在路上遇到自己喜欢的人 我要在路上立个路牌啦 哦哦 开个玩笑 哈哈 博主 男生 水瓶座 90年 来自江西农村 本科学历 男 身高167cm 独
  • Ubuntu16.04配置Android开发环境

    1 下载安装jdk 用oracleJDK 据说openJDK很难用 下载地址 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html
  • [转]npm install 参数 的含义

    npm 5 0 0 之前 有 save 参数才会把模块写入到 packages json 现在已经是内置参数 不用额外写了 1 npm 常用的安装命令 npm i 就是npm install 简写 npm i xxx D 就是 npm i
  • 第十一章 关联容器(重点)

    11 关联容器 重点 关联容器中的元素是按关键字来保存和访问的 map 中的元素是一些关键字 值 key value 对 关键字起到索引的作用 值则表示与索引相关联的数据 set 中每个元素只包含一个关键字 set 支持高效的关键字查询操作
  • 运用威廉指标判断短线买卖点(图解)

    威廉指标 W R 又称为威廉超买超卖指数 它与随机摆动指标 KDJ 相似 也是一种分析市场短期内超买超卖情况的摆动类指标 威廉指标是一个波动性很强的短线指标 它可以帮助投资者在震荡行情中较为准确地进行高抛低吸操作 威廉指标的设计原理 威廉指
  • VS Code 配合 WSL 搭建 C/C++ 开发环境

    WSL 真香 最近在看 TCP IP网络编程 韩国人写的 讲解了 Windows 和 Linux 平台下的网络编程 才看了四章 感觉通俗易懂 值得一读 出版社网站上提供了源码 平时主要使用 Windows 为了看本书切换到 Linux 感觉
  • 盘点JAVA中比较常见的数据类型的 取值空间大小(让我们来干了这杯爪洼岛咖啡)

    JAVA作为一门面向对象的编程语言 吸收了C 等编程语言的优 点的同时 也展现了它独有的强大一面 列如可移植性可跨平台 性与及兼容性等特征 吸引了无数程序猿为其着迷 话不多说接下来今天我来带大家了解JAVA这门编程语言 中常用的数据类型的相
  • 深度学习------pytorch,CNN:实现mnist,cifar10数据集

    1 torch实现mnist数据集 1 1 cnn卷积 用全连接层写 实现mnist数据集分类 import torch from torch autograd import Variable import numpy as np from
  • How do Functional, Structural, and Behavioral Models Work Together to Describe a Whole System?

    原文链接 https brogramo com how do functional structural and behavioral models work together to describe a whole system As a
  • 机器学习、数据挖掘和统计模式识别学习(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 机器学习是让计算机在没有明确编程的情况下采取行动的科学 在过去的十年中 机器学习为我们提供了自动驾驶汽车 实用的语音识别 有效的网络搜索以及对人类基因组的理解大大提
  • postgresql-使用pg_dump导出表、pg_store导入表

    pg dump 是一个用于备份PostgreSQL数据库的实用工具 即使当前数据库正在使用 也能够生成一致性的备份 且不会阻塞其他用户访问数据库 包括读 写 pg restore 从一个归档中恢复一个由 pg dump 创建的 Postgr
  • 航空航天专业词汇(待补全)

    航空航天专业词汇 英文 中文 aborted rejected abandoned take off 中断起飞 above cloud 在云上 access flap 接口盖 acceleration 加速促进 actuating jack
  • html type=hidden 属性,input 属性及类型有哪些(type=text/button/hidden)

    input 从字面意就可以看出专门用来给用户输入文字的 当然也包括选择文件 它不具体表示某一类元素 如文本框 text 要使它具体表示一类元素必须加类型指明 如表示文本框加 type text type 也是 input 众多属性中最重要的
  • spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集

    前言 本章是spring基于XML 配置bean系类中第7篇讲解spring通过文件属性注入bean和基于xml的bean的自动装配以及spring eel表达式的使用加代码合集 个人主页 尘觉主页 个人简介 大家好 我是尘觉 希望我的文章
  • c语言 打空心菱形

    没错 如图所示 我们要整一个这样的菱形 写的挺麻烦的 代码如下 我是一半一半写的 要n 5 先写上半部分的代码 那么它是咋写出来的呢 本题可以完全用for语句写 但我选择了用for和if语句相结合的方式 i是代表的横 j代表的是列 所以它最
  • nginx相关漏洞处理:CVE-2016-2183、CVE-2022-41741、CVE-2022-41742

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 漏洞内容 二 现状 三 centos7安装openssl11 四 升级nginx到1 24 0 1 下载nginx 2 编译安装nginx 3 配置ngi
  • 2022数学建模美赛E题详细思路获取

    已更新 公众号 千千小屋grow 数据在文后链接 背景 正如我们所知 气候变化对生命构成了巨大的威胁 为了减轻气候变化的影响 我们需要采取严厉的行动 以减少大气中的温室气体的数量 仅仅是减少温室气体的排放是不够的 我们需要努力增加通过生物圈
  • log4j日志在java控制台输出,简单实用

    log4j日志在java控制台输出 简单实用 1 log4j输出有2中方式 第一种是将日志信息保存在一个文本当中 第二种是输出到控制台中 下面介绍第二种方式 2 在控制台输出log4j日志信息 是开发项目中常用的也是比不可少的也是必须会的一
  • 微信小程序中slider实现拾色器功能

    微信小程序中slider实现拾色器功能 思路 效果图 体验 代码 效果体验 思路 画板中要实现颜色选择功能 几经周折 效果还可以 整个思路就是 1 利用线性过渡实现slider背景渲染 2 获取slider滑块value值 3 计算该val