Vue颜色选择器实现(两种方法)

简介: Vue颜色选择器实现(两种方法)

前言


本文讲述两种颜色选择器的实现方式。


别划走,最后有完整源代码。


第一种:@input和input[type=color]实现下述效果。



第二种:利用colors颜色数组、:style和v-for实现下列效果。





提示:以下是本篇文章正文内容,下面案例可供参考


一、颜色选择器(input[type=color]实现)


新建html文件并且导入vue.js


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <script src="./js/vue.js"></script>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
</script>
</body>
</html>


Vue导入成功测试代码实现

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <script src="./js/vue.js"></script>
  <div id="app">
    {{test}}
  </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    new Vue({
      el:"#app",
      data:{
        test:"Vue导入成功"
      }
    })
  </script>
<script>
</script>
</body>
</html>



实现过程与代码介绍


结构层


一个div块装颜色效果,一个input[type=color],一个按钮控制input是否消失。如下图所示。




<div id="app">
    <div class="overlay" :style="{backgroundColor:colorSelected}" @click="picker=!picker"></div>
    <div v-show="picker">
      <input type="color" :value="colorSelected" @input="selectColors($event)">
      <button @click="picker=false">ok</button>
    </div>
  </div>

样式层

样式就用到一个,设置div背景宽高

<style>
      .overlay{
        width:100px;
        height:100px;
      }
    </style>


js层


data数据


input颜色选择器需要用到一个参数来保存16进制颜色

颜色选择器显示隐藏还需要有一个boolean参数做判断用

data:{
        colorSelected:"#000000",
        picker:false
      },



methods方法


输入框显示隐藏也可以用methods方法下实现,在这里我结构层用@click=“picker=!picker”实现的。

唯一的方法实现是用@input实时获取value值得变换并更新到colorSelected数据中,利用的是event.target.value来进行值调用。


methods:{
        selectColors(event){
          this.colorSelected=event.target.value
        }
      }



完整代码


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      .overlay{
        width:100px;
        height:100px;
      }
    </style>
  </head>
  <script src="./js/vue.js"></script>
  <div id="app">
    <div class="overlay" :style="{backgroundColor:colorSelected}" @click="picker=!picker"></div>
    <div v-show="picker">
      <input type="color" :value="colorSelected" @input="selectColors($event)">
      <button @click="picker=false">ok</button>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    new Vue({
      el:"#app",
      data:{
        colorSelected:"#000000",
        picker:false
      },
      methods:{
        selectColors(event){
          this.colorSelected=event.target.value
        }
      }
    })
  </script>
<script>
</script>
</body>
</html>


二、颜色选择器(colors数组实现)


1.完整代码

代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>颜色选择器</title>
    <style scoped>
    .color-picker {
      display: flex;
      flex-direction: column;
      align-items: center;
    }
    .color-box {
      width: 100px;
      height: 100px;
      margin-top: 20px;
    }
    .color-options {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
      margin-top: 20px;
    }
    .color-option {
      width: 30px;
      height: 30px;
      margin: 5px;
      border-radius:50%;
    }
    .color-option.active {
      border: 2px solid #FFFFFF;
    }
    </style>
  </head>
  <body>
    <div id="app">
      <div class="color-picker">
        <div class="color-box" :style="{ backgroundColor: selectedColor }"></div>
        <div class="color-options">
          <div v-for="(color, index) in colors" :key="index" 
            class="color-option" :style="{ backgroundColor: color }"
            @click="selectColor(color)"
            :class="{ active: color === selectedColor }"></div>
        </div>
      </div>
    </div>
    <script src="../vue.js"></script>
    <script>
      new Vue({
        el:"#app",
        data() {
          return {
            colors: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3',
                     '#03A9F4', '#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#FFEB3B',
                     '#FFC107', '#FF9800', '#FF5722', '#795548', '#9E9E9E', '#607D8B'],
            selectedColor: '#F44336',
          };
        },
        methods: {
          selectColor(color) {
            this.selectedColor = color;
            this.$emit('color-selected', color);
          }
        }
      })
    </script>
  </body>
</html>



相关文章
|
4天前
|
缓存 监控 JavaScript
探讨优化Vue应用性能和加载速度的策略
【5月更文挑战第17天】本文探讨了优化Vue应用性能和加载速度的策略:1) 精简代码和组件拆分以减少冗余;2) 使用计算属性和侦听器、懒加载、预加载和预获取优化路由;3) 数据懒加载和防抖节流处理高频事件;4) 图片压缩和选择合适格式,使用CDN加速资源加载;5) 利用浏览器缓存和组件缓存提高效率;6) 使用Vue Devtools和性能分析工具监控及调试。通过这些方法,可提升用户在复杂应用中的体验。
16 0
|
5天前
|
JavaScript 前端开发
vue(1),小白看完都会了
vue(1),小白看完都会了
|
4天前
|
JavaScript 开发工具 git
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
10 1
|
5天前
|
JavaScript 前端开发 定位技术
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
|
5天前
|
JavaScript
Vue中避免滥用this去读取data中数据
Vue中避免滥用this去读取data中数据
|
5天前
|
JavaScript 数据库
ant design vue日期组件怎么清空 取消默认当天日期
ant design vue日期组件怎么清空 取消默认当天日期
|
5天前
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
9 0
|
5天前
|
JavaScript 前端开发 数据安全/隐私保护
揭秘Vue中v-model的内部工作机制
揭秘Vue中v-model的内部工作机制
|
5天前
|
JavaScript
vue中使用pinia及持久化
vue中使用pinia及持久化
8 0
|
5天前
|
JavaScript 前端开发 UED
Vue class和style绑定:动态美化你的组件
Vue class和style绑定:动态美化你的组件