Eventos
Eventos basicos
Eventos admitidos: update
, change
, set
, slide
y drag
. Estos eventos se pueden usar simultáneamente. También existen los eventos start
y end
, que se activan cuando se inicia o termina un arrastre.
Los eventos siempre se activan en el siguiente orden:
start
>slide
>drag
>update
>change
>set
>end
Todos los eventos responden objetos similares
Respuesta de los eventos
La mayoria de los eventos responden el mismo tipo de objeto.
json
{
"values": [
0
],
"handle": 0,
"unencoded": [
0
],
"tap": true,
"positions": [
0
]
}
Ejemplo de funcionamiento
Valor:
Valor:
startslidedragupdateupdate:model-valuechangesetend
Ver código de ejemplo
html
<template>
<p>Valor: {{configs.values && configs.values[0]}}</p>
<p>Valor: {{configs.values && configs.values[1]}}</p>
<div class="events-bar">
<span class="event-tag">
<span class="z-0">start</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.start, 'opacity-0': !configs.events.start}"></div>
</span>
<span class="event-tag">
<span class="z-0">slide</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.slide, 'opacity-0': !configs.events.slide}"></div>
</span>
<span class="event-tag">
<span class="z-0">drag</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.drag, 'opacity-0': !configs.events.drag}"></div>
</span>
<span class="event-tag">
<span class="z-0">update</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.update, 'opacity-0': !configs.events.update}"></div>
</span>
<span class="event-tag">
<span class="z-0">update:model-value</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.updateModelValue, 'opacity-0': !configs.events.updateModelValue}"></div>
</span>
<span class="event-tag">
<span class="z-0">change</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.change, 'opacity-0': !configs.events.change}"></div>
</span>
<span class="event-tag">
<span class="z-0">set</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.set, 'opacity-0': !configs.events.set}"></div>
</span>
<span class="event-tag">
<span class="z-0">end</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.end, 'opacity-0': !configs.events.end}"></div>
</span>
</div>
<v-slider
v-model="configs.values"
:start="configs.start"
:step="configs.step"
:behaviour="configs.behaviour"
:connect="configs.connect"
:range="configs.range"
@update:model-value="() => activeEvent('updateModelValue')"
@start="v => activeEvent('start')"
@slide="v => activeEvent('slide')"
@drag="v => activeEvent('drag')"
@update="v => activeEvent('update')"
@change="v => activeEvent('change')"
@set="v => activeEvent('set')"
@end="v => activeEvent('end')"
></v-slider>
</template>
<script setup>
import { reactive } from 'vue';
const activeEvent = (eventName) => {
if (configs.events[eventName]) {
return;
}
configs.events[eventName] = true;
setTimeout(() => {
configs.events[eventName] = false;
}, 500);
};
const configs = reactive({
values: null,
start: [5, 15],
behaviour: 'drag',
connect: true,
range: {
'min': 1,
'max': 20
},
events: {
start: false,
slide: false,
drag: false,
update: false,
change: false,
set: false,
updateModelValue: false,
end: false,
},
});
</script>
<style>
.events-bar {
display: flex;
justify-content: space-between;
margin-bottom: 1.5rem;
}
.event-tag {
border: 1px solid #f3f4f6;
border-radius: 0.25rem;
padding: 0.25rem;
position: relative;
color: #000;
}
.event-tag .z-0 {
position: relative;
z-index: 0;
}
.event-tag__bg {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
border-radius: 0.25rem;
background-color: #e5e7eb; /* Tailwind: bg-gray-200 */
z-index: -10;
transition: opacity 0.5s;
}
.opacity-100 {
opacity: 1;
}
.opacity-0 {
opacity: 0;
}
</style>
Eventos adicionales
Evento hover
Respuesta del evento
La respuesta de este evento es un valor numerico.
Ejemplo de funcionamiento
Valor:
Valor:
Valor de hover: 0
startslidedragupdateupdate:model-valuechangesetendhover
Ver código de ejemplo
html
<template>
<p>Valor: {{configs.values && configs.values[0]}}</p>
<p>Valor: {{configs.values && configs.values[1]}}</p>
<p>Valor de <b>hover</b>: {{configs.hoverValue}}</p>
<div class="events-bar">
<span class="event-tag">
<span class="z-0">start</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.start, 'opacity-0': !configs.events.start}"></div>
</span>
<span class="event-tag">
<span class="z-0">slide</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.slide, 'opacity-0': !configs.events.slide}"></div>
</span>
<span class="event-tag">
<span class="z-0">drag</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.drag, 'opacity-0': !configs.events.drag}"></div>
</span>
<span class="event-tag">
<span class="z-0">update</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.update, 'opacity-0': !configs.events.update}"></div>
</span>
<span class="event-tag">
<span class="z-0">update:model-value</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.updateModelValue, 'opacity-0': !configs.events.updateModelValue}"></div>
</span>
<span class="event-tag">
<span class="z-0">change</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.change, 'opacity-0': !configs.events.change}"></div>
</span>
<span class="event-tag">
<span class="z-0">set</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.set, 'opacity-0': !configs.events.set}"></div>
</span>
<span class="event-tag">
<span class="z-0">end</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.end, 'opacity-0': !configs.events.end}"></div>
</span>
<span class="event-tag">
<span class="z-0">hover</span>
<div class="event-tag__bg" :class="{'opacity-100': configs.events.hover, 'opacity-0': !configs.events.hover}"></div>
</span>
</div>
<v-slider
v-model="configs.values"
:start="configs.start"
:step="configs.step"
:behaviour="configs.behaviour"
:connect="configs.connect"
:range="configs.range"
@update:model-value="() => activeEvent('updateModelValue')"
@start="v => activeEvent('start')"
@slide="v => activeEvent('slide')"
@drag="v => activeEvent('drag')"
@update="v => activeEvent('update')"
@change="v => activeEvent('change')"
@set="v => activeEvent('set')"
@end="v => activeEvent('end')"
@hover="v => {configs.hoverValue = v; activeEvent('hover');}"
></v-slider>
</template>
<script setup>
import { reactive } from 'vue';
const activeEvent = (eventName) => {
if (configs.events[eventName]) {
return;
}
configs.events[eventName] = true;
setTimeout(() => {
configs.events[eventName] = false;
}, 500);
};
const configs = reactive({
values: null,
start: [5, 15],
connect: true,
hoverValue: 0,
behaviour: 'drag-hover-snap',
range: {
'min': 1,
'max': 20
},
events: {
start: false,
slide: false,
drag: false,
update: false,
change: false,
set: false,
updateModelValue: false,
hover: false,
end: false,
},
});
</script>
<style>
.events-bar {
display: flex;
justify-content: space-between;
margin-bottom: 1.5rem;
}
.event-tag {
border: 1px solid #f3f4f6;
border-radius: 0.25rem;
padding: 0.25rem;
position: relative;
color: #000;
}
.event-tag .z-0 {
position: relative;
z-index: 0;
}
.event-tag__bg {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
border-radius: 0.25rem;
background-color: #e5e7eb; /* Tailwind: bg-gray-200 */
z-index: -10;
transition: opacity 0.5s;
}
.opacity-100 {
opacity: 1;
}
.opacity-0 {
opacity: 0;
}
</style>