码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 工作笔记-滚动列表中指定项到可是区域范围内


    功能背景:

    比如给你区域区划的列表,但是固定容器高度,会出现滚动条,如果此时存在一个默认选中项,恰巧他不在可视区域内,但是想要一点进来就要在可视区域内看到这个选中项。那么就要想办法去把他滚动出来了

    效果图:
    第一种:

    自己做的列表,注意看这个选中项在最后一行,那么就把他默认滚动到视口范围内
    在这里插入图片描述
    原理就是,获取dom,然后调用scrollIntoView()这个方法
    对应代码:

    <div class="city-list" id="cityList">
                        <div 
                            :class="['area-item',cityCode==item.qhdm?'active':'']" 
                            :ref="'cityQhdm'+item.qhdm"
                            v-for="(item,index) in cityList" :key="index"
                            >
                            {{item.qhmc}}
                        </div>
                    </div>
    setTimeout(()=>{
                    this.$refs['cityQhdm'+this.cityCode][0].scrollIntoView({alignToTop: true})
                },100)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    第二种:

    使用了vant的picker组件,选中项目默认也并不在选中位置。也是操作dom进行操作
    在这里插入图片描述
    查看dom可知,是通过transform实现的
    在这里插入图片描述
    那么就可以手动计算选中项的位置。然后手动滚动过去。没看第三种之前,甚至觉得自己做的挺细节的了。。。。

    <van-picker
                            id="scrollSelectCity"
                            @change="changeCity"
                            :title="cityName"
                            :visible-item-count="6"
                            :columns="cityList"
                        >
                            <template #option="item">
                                <van-row>
                                    <van-col class="van-hairline--left" @click="chooseCity(item)">
                                        <p :class="['label-content',item.qhmc==cityName?'active':'']">
                                            {{ item.qhmc }}
                                        </p>
                                    </van-col>
                                </van-row>
                            </template>
                        </van-picker>
    scrollCity(){
                let top = 110
                if(this.cityCode){
                    let index = this.cityList.findIndex((item)=>{return item.qhdm==this.cityCode})
                    if(index!=-1){
                        top = 110-(index*44)
                    }
                }else{
                    top = 110
                }
                this.$nextTick(()=>{
                    if(!this._dialogVisible)return
                    let elParent = document.getElementById("scrollSelectCity")
                    let el = elParent.getElementsByClassName('van-picker-column__wrapper')[0]
                    el.style.transform = `translate3d(0px, ${top||0}px, 0px)`
                })
            },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    第三种:

    还是关于这个vant的picker组件,当时没有仔细看文档,淦!实际上是有这个属性的:default-index="2",自己操作dom的简直是多此一举。。。。人傻了,计算索引值,赋值即可。

    <van-picker
                            id="scrollSelectCity"
                            @change="changeCity"
                            :title="cityName"
                            :visible-item-count="6"
                            :default-index="testIndex"
                            :columns="cityList"
                        >
                            <template #option="item">
                                <van-row>
                                    <van-col class="van-hairline--left" @click="chooseCity(item)">
                                        <p :class="['label-content',item.qhmc==cityName?'active':'']">
                                            {{ item.qhmc }}
                                        </p>
                                    </van-col>
                                </van-row>
                            </template>
                        </van-picker>
    scrollCity(){
                    let index = this.cityList.findIndex((item)=>{return item.qhdm==this.cityCode})
                    this.testIndex = index
                
            },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    三面“有赞”Java岗斩获offer:Spring+JVM+并发锁+分布式+算法
    数学建模学习(79):Matlab神经网络工具箱使用,实现多输入多输出预测
    【Django-02】 Model模型和模型描述对象Meta
    荔枝集团:如何提升项目管理效能,让需求交付快进50%
    3分钟让你学会axios在vue项目中的基本用法(建议收藏)
    记一次Gson在不同环境解析时间结果不同的BUG定位
    react生命周期钩子函数
    React路由基础、路由基本使用、组件说明、执行过程、编程式导航、默认路由
    java计算机毕业设计九宫格日志网站源码+数据库+系统+lw文档+mybatis+运行部署
    赋能智能安防,数字化采购协同管理平台助力企业采购精细化管理
  • 原文地址:https://blog.csdn.net/qq_44706619/article/details/127880689
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号