• uniapp组件scroll-view实现双联动。(demo)


    
    

    <template>
        <view class="use_com">
            <text>uniapp ---- 组件</text>
            <view>1、 scroll-view</view>
            
            <scroll-view class="com_scroll_view" scroll-x="true">
                <view v-for="(item,index) in get_scroll_view_list" :key="index" class="com_content">
                    <view>
                        <image :src="item.mainPic" mode="" class="com_image"></image>
                        <view class="com_text1">{{item.skuName}}</view>
                        <view class="com_text2">{{item.priceValue}}</view>
                        <view class="com_text3">{{item.originPrice}}</view>
                    </view>
                    <view>
                        <view class="com_text4">
                            {{item.companyName}}
                        </view>
                    </view>
                </view>
            </scroll-view>
            
            <view>******************************</view>
            
            <view>1、 scroll-view 双联动案例 (类似于锚点,原理也还是锚点)利用 scroll-into-view</view>
            <!-- uniapp获取节点信息,根据节点信息调整写需求。 -->
            <view>
                <view class="left">
                    <!--    :class="index == click_index ? 'life_title':''"
                            :class="{life_title:index == click_index}"        -->
                    <view 
                    v-for="(item,index) in left_list" 
                    :key="index" @click="change_click_index(index)" 
                    :class="{life_title:index == click_index}"
                    >
                        {{item.title}}
                    </view>
                </view>
                    
                <view class="right">
                    <scroll-view 
                    scroll-y="true" 
                    class="scroll_y" 
                    :scroll-into-view="scroll_into_view" 
                    scroll-with-animation="true"
                    @scroll="scroll_detail"
                    @scrolltolower="scroll_bottom"
                    >
                        <view v-for="(item,index) in left_list" :key="index">
                            <view style="background: red;" :id="'id'+index" class="selectAll">{{item.title}}</view>
                            <view v-for="(ite,ind) in item.list" :key="ind">{{ite}}</view>
                        </view>
                    </scroll-view>
                </view>
            </view>
        </view>
    </template>
    
    <script>
        export default {
            data() {
                return {
                    get_scroll_view_list:[],
                    left_list:[
                        { title:"手机",list:["iphone12","华为p40","vivo90","oppoy77","三星手机"] },
                        { title:"电脑",list:["Mac pro","联想yoga910","华硕911","联想811","三星电脑"] },
                        { title:"水果",list:["香蕉","苹果","西瓜","榴莲","山竹"] },
                        { title:"饮料",list:["coke可乐","脉动","红牛","冰糖雪梨","果汁"] },
                    ],
                    //切换class
                    click_index:0,
                    //id动态切换
                    scroll_into_view:"",
                    //节点top值
                    top_list:[]
                }
            },
            onLoad: function(){
                this.get_scroll_view();
            },
            methods: {
                async get_scroll_view(){
                    let res = await this.$uni_request({
                        body:{
                            defaultProvince: "370000",
                            firstCateCode: "",
                            oldCustFlag: "2",
                            requiredAmount: "3"
                        },
                        header:{
                            bizCode: "prom013"
                        }
                    });
                    this.get_scroll_view_list = res.data.body.result;
                },
                //切换
                change_click_index(index){
                    this.click_index = index;
                    //利用uniapp组件的配置信息。
                    this.scroll_into_view = 'id'+index;
                    //解决最后一个 ***来回*** 问题 (由于点击左侧导航,右侧锚点位置信息变化,此时滚动事件也随之滚动。)
                    uni.setStorageSync("resolve","last");
                    setTimeout(()=>{
                        uni.clearStorageSync("resolve")
                    },400);
                },
                //滚动过程
                scroll_detail(options){
                    //options  为滚动信息。  options.detail.scrollTop  值为相对于scroll-view。
                    if(!uni.getStorageSync("resolve")){
                        this.get_node_details(options);
                    };
                },
                //获取节点信息
                get_node_details(options){
                    const query = uni.createSelectorQuery().in(this); //获得实力
                    //获取多个节点方式
                    query.selectAll(".selectAll").boundingClientRect(data=>{
                        console.log(data); //得到class类名为  selectAll的数组集合
                        this.top_list = data.map(item=>{
                            return Math.ceil(item.top);
                        });
                        this.async_detail_msg(options);
                    }).exec();
                },
                async_detail_msg(options){
                    //options  为滚动信息。  options.detail.scrollTop  值为相对于scroll-view。
                    let top_page = options.detail.scrollTop + this.top_list[0];
                    
                    for(let i = 0;i < this.top_list.length; i++){
                        let node1 = this.top_list[i];
                        let node2 = this.top_list[i+1];
                        if(node2 && top_page >= node1 && top_page < node2){
                            this.click_index = i;
                            break;
                        }else if(node2 && top_page === node2){
                            this.click_index = i + 1;
                            break;
                        }
                    }
                },
                //滚动到底部
                scroll_bottom(options){
                    setTimeout(()=>{
                        this.click_index = 3;
                    },100)
                },
                
            }
        }
    </script>
    
    <style lang="scss" scoped>
        .use_com{
            margin-bottom: 100px;
        }
        .com_scroll_view{
            white-space:nowrap;
            .com_content{
                display: inline-block;
                 200px;
                padding: 0 10px;
                .com_image{
                     100%;
                }
                .com_text1,.com_text2,.com_text3,.com_text4{
                     100%;
                    white-space: nowrap;
                    overflow: hidden;
                    text-overflow: ellipsis;
                }
                
            }
        }
        .left,.right{
            display: inline-block;
            border: 1px solid #4CD964;
            vertical-align: top;
            height: 160px;
        }
        .right{
            display: inline-block;
            border: 1px solid #4CD964;
        }
        .scroll_y{
            height: 100%;
        }
        .life_title{
            background: #DD524D;
        }
        
    </style>

     

  • 相关阅读:
    在ant编译java文件时产生debug信息
    Ant里面神奇的fork
    在ant中将依赖jar包一并打包的方法
    Java通过class文件得到所在jar包
    Bat脚本:通过端口号查找进程号
    使用emma时遇到的一些问题
    python之路-day18-反射
    python之路-day17-类与类之间的关系
    python之路-day16-类的成员
    python之路-day15-初识面向对象
  • 原文地址:https://www.cnblogs.com/swt-axios/p/13474706.html
Copyright © 2020-2023  润新知