vue2 角度选择器组件,鼠标拖动旋转选择角度

18 篇文章 1 订阅
14 篇文章 0 订阅

vue角度选择器组件实现代码

实现一个超简单的角度选择器组件

毒蘑菇配色自定义角度选择器

<template>
    <div 
        ref="setup_angle"
        class="setup_angle"
        @mousedown="mousedown = true"
        @mouseup="mousedown = false"
        @mousemove="on_mousemove"
        @mouseleave="mousedown=false">
        <div 
            class="container"
            :style="{
                transform:'rotate('+angle_data+'deg)',
            }">
            <div class="point"></div>
        </div>
        <div class="content">
            {{ angle_data+'°' }}
        </div>
    </div>
</template>

<script>
组件的所有代码,有点vue基础的都能懂
export default { 
    name: 'setup_angle',
    data(){
        return{
            angle_data:0,
            mousedown:false, //鼠标是否按下
        };
    },
    methods:{
        calculate_degree(x, y, centerX, centerY) { //根据当前坐标和中心坐标计算角度
            const radians = Math.atan2(x - centerX, y - centerY);
            return (radians * (180 / Math.PI) * -1) + 180;
        },
        on_mousemove(event){ //鼠标移动事件(按下移动就算拖拽,在元素里移动才算,元素外移动监听)
            if(this.mousedown){ //表示是按下移动的
                const setup_angle = this.$refs.setup_angle;
                let centerX = -~(setup_angle.offsetHeight || setup_angle.height)/2;
                let centerY = -~(setup_angle.offsetWidth || setup_angle.width)/2;
                let angle = this.calculate_degree(event.offsetX,event.offsetY,centerX,centerY);
                this.angle_data = -~angle;
                this.$emit('angle',angle); //发送事件
            }
        },
    },
}
</script>

<style scoped lang="scss">
.setup_angle{
    width: 100%;
    height: 100%;
    border: 5px solid #e8454571;
    box-sizing: border-box;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    cursor: pointer;
    >.container{
        pointer-events: none;
        height: 100%;
        width: fit-content;
        padding: 5px 0;
        box-sizing: border-box;
        >.point{
            width: 15px;
            height: 15px;
            background-color: #e84545;
            border-radius: 50px;
        }
    }
    >.content{
        position:absolute;
        font-size: 16px;
        color: #5b748e;
        font-weight: bold;
        pointer-events: none;
    }
}
</style>

在你需要用到该组件的地方调用组件

// 1:引入组件 import Setup_angle from './components/setup_angle.vue'
// 2:注册组件 
components: {
    Setup_angle,
}
// 3:调用组件
<Setup_angle
    @angle="on_angle">
</Setup_angle>
// 4:on_angle为角度发生变化时的回调函数,参数为角度值
methods:{
    on_angle(angle){
        console.log(angle);    
    },
},

这样一个角度选择器就做好啦

最后附上个人小站地址
一篇文字

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2颜色选择器组件是一个用于选择颜色的组件,可以支持鼠标拖动选择颜色、手动输入16进制或rgb颜色值。这个组件可以在Vue项目中使用,并且有多个可供选择的颜色列表。你可以通过引入组件并在项目中注册它来使用它。例如,可以使用以下代码引入和注册组件: import colorSelect from "../../commonview/colorSelect.vue"; components: { colorSelect } 然后在模板中使用<color-select>标签来调用组件,并传入相应的属性。例如,你可以传入一个颜色列表和一个默认颜色: <color-select :color-list="colorList" v-model="color"></color-select> 在data属性中,你可以设置颜色的初始数据和默认值。在这个例子中,colorList是一个颜色列表,color是一个用于存储选中颜色的变量。 data(){ return { colorList: ["#FFC0CB", "#DB7093", "#FF1493", "#DC143C", "#DDA0DD", "#DA70D6", "#FF00FF", "#9370DB", "#800080", "#6495ED", "#4169E1", "#0000FF", "#87CEEB", "#E1FFFF", "#00FFFF", "#7FFFAA", "#00FF7F", "#008000", "#FFFFE0", "#FFFF00", "#FFD700", "#F5DEB3", "#FFA500", "#CD5C5C"], color: '#FFC0CB' } } 这样就可以在Vue项目中使用这个颜色选择器组件了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue - 高效稳定的颜色选择器组件(支持鼠标拖动选择与手动输入16进制、rgb颜色值)](https://blog.csdn.net/weixin_44198965/article/details/126947128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vue+elementUI二次封装之颜色选择器](https://blog.csdn.net/weixin_52691965/article/details/126037224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [浏览器显示数据库中数据的条形图柱状图 前后端分离vue.js+spring boot 计算机软件工程课程设计毕业设计 ...](https://download.csdn.net/download/Amzmks/88275824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值