😺
vue3でスライダーとスクロールの位置情報と移動(簡易版)
はじめに
デザインは考慮していません。ライブラリは利用していません。
たいしたことしていません。
ただ、これベースでいろいろ応用ができそう。
環境
- vue3
- typescript
内容
スライダー
- したこと
2秒ごとに箱の色が変わる。ボタンクリックでも色を変えれる。 - コード
<template>
<div class="box" :style="{'background-color':sliderArray[currentNum]}"></div>
<button @click="next">next</button>
</template>
<script lang="ts">
import { defineComponent, onMounted,ref } from "vue"
export default defineComponent ({
setup () {
const sliderArray=ref()
const currentNum=ref(0)
sliderArray.value=['red','blue','black','yellow','green']
const next=()=>{
if(currentNum.value<sliderArray.value.length-1){
currentNum.value+=1
}else{
currentNum.value=0
}
}
onMounted(()=>{
setInterval(()=>{
if(currentNum.value < sliderArray.value.length-1){
currentNum.value+=1
}else{
currentNum.value=0
}
},2000)
})
return {
currentNum,
sliderArray,
next
}
}
})
</script>
<style lang="scss">
.box{
width:100px;
height: 100px;
}
</style>
スクロールの位置取得
- したこと
縦のスクロール数が100~500の間は、赤いボックスが表示される - 参考URL
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener - コード
<template>
<div class="box" v-if="displayBox"></div>
</template>
<script lang="ts">
import { defineComponent, h, onMounted,ref } from "vue"
export default defineComponent ({
setup () {
const displayBox=ref(false)
onMounted(()=>{
window.addEventListener('scroll',()=>{
if(window.scrollY > 100 && window.scrollY < 300){
displayBox.value=true
}else{
displayBox.value=false
}
})
})
return{
displayBox
}
}
})
</script>
<style lang="scss">
body{
height: 2000px;
}
.box{
width:100px;
height: 100px;
background-color: red;
position: relative;
top:200px;
left:0px;
}
</style>
スクロールの移動
- したこと
ボタンを押したら、スクロールする - 参考URL
https://developer.mozilla.org/ja/docs/Web/API/Window/scrollTo - コード
<template>
<button @click="move">下に移動</button>
</template>
<script lang="ts">
import { defineComponent} from "vue"
export default defineComponent ({
setup () {
const move=()=>{
scrollTo({
top:200,
left:0,
behavior:'smooth'
});
}
return{
move
}
}
})
</script>
<style lang="scss">
body{
height: 2000px;
}
</style>
以上になります
Discussion