美文网首页
关于slider 样式处理

关于slider 样式处理

作者: 羊驼驼驼驼 | 来源:发表于2024-03-02 23:48 被阅读0次

🌬🌬🌬前言:今天来分享一下移动端Slider划动active状态切换样式的相关处理方案。

开整

1. src/views/main/components/navigation/mobile/index.vue
<!-- 滑块 -->
<li
  ref="sliderTarget"
  class="absolute h-[22px] bg-zinc-900 rounded-lg duration-200"
  :style="sliderStyle"
></li>

<script setup>
import { ref } from 'vue'

// 滑块
const sliderStyle = ref({
  transform: 'translateX(0px)',
  width: '60px'
})
</script>

😎😎😎分析一波:通过translateX来控制Slider的切换,所以我们需要计算除当前点击的item的位置和宽度。

  • 装备一:选中的item下标:currentCategoryIndex
  • 装备二:所有的items元素:itemRefs
  • 装备三:最外层父元素 ul 的横向滚动偏离位置:ulScrollLeft
  • 装备四:currentCategoryIndex改变时,获取items 下标元素的 leftwidth,计算 sliderStyle

🍭🍭🍭插播一条小知识点:Element.getBoundingClientRect() - Web API 接口参考 | MDN (mozilla.org) 返回元素的大小及其相对于视口的位置。

🍭🍭🍭插播一条小知识点:useScroll | VueUse中文文档 (vueusejs.com) 响应式获取滚动位置和状态。

<ul ref="ulTarget">
  <!-- 滑块 -->
  <li
    :style="sliderStyle"
  ></li>
  <!-- category item -->
  <li
    :ref="setItemRef"
    :class="{
      'text-zinc-100 ': currentCategoryIndex === index // 选中文字高亮
    }"
    @click="onItemClick(index)"
  >
   {{ item.name }}
 </li>
</ul>

<script setup>
import { ref, watch, onBeforeUpdate } from 'vue'
import { useScroll } from '@vueuse/core'
// 滑块
const sliderStyle = ref({
   transform: 'translateX(0px)',
   width: '60px'
})
// 选中的 item 下标
const currentCategoryIndex = ref(0)
// 获取填充的所有 item 元素
let itemRefs = []
const setItemRef = (el) => {
  if (el) {
    itemRefs.push(el)
  }
}
onBeforeUpdate(() => {
  itemRefs = []
})
// 获取 ul 元素,以计算偏移位置
const ulTarget = ref(null)
const { x: ulScrollLeft } = useScroll(ulTarget)
watch(currentCategoryIndex, (val) => {
  // 获取选中元素的 left、width
  const { left, width } = itemRefs[val].getBoundingClientRect()
  // 为 sliderStyle 设置属性
  sliderStyle.value = {
    // ul 横向滚动位置 + 当前元素的 left 偏移量
    transform: `translateX(${ulScrollLeft.value + left - 10 + 'px'})`,
    width: width + 'px'
  }
})

// item 点击事件
const onItemClick = (index) => {
  currentCategoryIndex.value = index
}

👏👏👏完事儿

贩卖快乐~.png

相关文章

  • UISlider 滑块图标 已滑动图片 未滑动图片 自定义

    经过笔者深入研究,实现对UISlider高度自定义,效果如下: 首先设置滑块的样式--图形: [slider se...

  • Flat风格的Qml滑动条

    基于Qml的Slider控件修改而成。 滑动条代码 滑动条样式代码 更多精彩内容请关注公众号Qt君。

  • UISlider 和返回手势冲突的问题

    首先页面上有一个宽度为屏幕宽度的 slider,是通过 set thumb image 来修改样式的,当我滑动到最...

  • 样式处理

    在src/styles 目录下创建以下的样式文件: .├── index.scss 全局...

  • 样式处理

    PostCSS是一个编译插件的容器。他的工作模式是接收样式源代码并交由编译插件处理,最后输出CSS。开发者可以自己...

  • 一个渐变的Slider

    一个渐变的Slider 参考系统的API,修改为你自己的样式 来看看效果 Demo地址觉得OK的, 记得? 后面发...

  • iOS - 自定义滑动条

    self.slider = [[UISlider alloc] init];_slider.minimumValu...

  • Swift的UISlider使用

    var slider = UISlider() var timer = NSTimer() slider.fram...

  • 轮播图组件开发

    在base/slider文件夹下创建slider.vue文件并在recommend.vue文件中引入 slider...

  • UISlider的订制使用

    近期项目要使用slider,需要做成的样式如下: 实现首先要创建一个继承UISlider的子类,因为改变滑条高度的...

网友评论

      本文标题:关于slider 样式处理

      本文链接:https://www.haomeiwen.com/subject/fshkzdtx.html