zoukankan      html  css  js  c++  java
  • uniapp弹窗踩坑

    问题描述

    问题一

    点击立即购买会弹出购买商品弹窗,滑动弹窗到底部之后,后面背景的滚动条

    解决方式

    如果弹窗展示则在最外层添加tl-show

    // 最外层元素
    <view
    	class="member-save-up"
    	:class="buyModal ? 'tl-show' : ''"
    	id="memberSaveUp"
    >
    </view>
    
    // 弹窗
    <view class="modal-bg" v-if="buyModal" v-show="!productDescModal">
    
    // 设置后面禁止滚动的样式
    .tl-show {
    	position: fixed;
    	    left: 0;
    	     100%;
    }
    
    

    问题二

    最外层使用fixed之后,默认会将浏览器滚动到顶部

    解决方式

    使用fixed布局之后,可以获取当前位置距离网页顶部距离,然后通过设置top值进行一个定位就能达到保留当前位置的功能

    // 获取当前滚动的距离
    onPageScroll(e) {
    	if (e.scrollTop) {
    		this.pageScrollTop = e.scrollTop;
    	}
    },
    // 设置外层
    <view
    	class="member-save-up"
    	:class="buyModal ? 'tl-show' : ''"
    	id="memberSaveUp"
    	:style="{
    		top: `-${pageScrollTop * 2}rpx`
    	}"
    >
    </view>
    

    问题三

    关闭弹窗之后,清除了fixed布局,页面还是会滚动到最顶部

    解决方式

    因为之前记录了网页顶部距离,可以在弹窗关闭之后,重新设置网页顶部距到刚才的位置就能到到效果,但是需要设置延时(不清楚具体的原理,怀疑是uniapp设置this的机制问题),会造成页面有一瞬间的闪现(从顶部到当前位置)

    this.buyModal=false;
    setTimeout(()=>{
        uni.pageScrollTo({
        	duration: 0,
        	scrollTop: this.pageScrollTop // number number number!
        });
    });
    

    问题四

    页面一瞬间的闪现

    解决方式

    通过直接操作dom的方式清除tl-show,而不是通过uniapp的数据判断,新增删除tl-show

    // 获取dom元素
    const query = uni.createSelectorQuery().in(this);
    query.select('#memberSaveUp').boundingClientRect(data => {
    	console.log(data)
    }).exec();
    this.memberSaveUpDom = query._component.$el;
    
    // 监听弹窗关闭
    watch: {
    	buyModal(newVal, oldVal) {
    		if (!newVal) {
    		    // 清除tl-show
    			this.memberSaveUpDom.setAttribute("class", 'member-save-up')
    			uni.pageScrollTo({
    				duration: 0,
    				scrollTop: this.pageScrollTop // number number number!
    			});
    			// window.scrollTo(0, this.pageScrollTop);
    		}
    	},
    },
    

    问题五

    部分手机已经实现了弹窗之后,后面元素不能滚动,并且关闭弹窗,还是保留之前的位置,但是部分手机触摸弹窗还是会发生后面的背景滚动到最顶部的问题

    解决方式

    控制弹窗阻止向上冒泡,就不会造成部分手机还能滚动到顶部的问题

    <view class="modal-bg" v-if="buyModal" v-show="!productDescModal" @touchmove.stop.prevent="disabledScroll">
    </view>
    
    disabledScroll() {
    	return
    },
    

    问题六

    当前弹窗的所有滚动事件都被自己禁止了,发现里面有部分动态加载数据需要滚动的地方也不能滚动了

    解决方式

    只禁用不需要滚动位置的元素

    <view class="h3" @touchmove.stop.prevent="disabledScroll">
    </view>
    <view class="price-title" v-if="buyType === 'buy'" @touchmove.stop.prevent="disabledScroll">
    	<view class="small-font">¥</view>
    	<view class="big-font">{{ buyDetail.price }}</view>
    </view>
    

    至此,弹窗问题已经解决了大部分,能够基本满足页面需求,多个手机做了测试,暂无发现明显问题

  • 相关阅读:
    轮叫调度(RoundRobin Scheduling)
    Python的Daemon管理器zdaemon
    How do you select a particular option in a SELECT element in jQuery? Stack Overflow
    元宵爬虫YuanXiaoSpider
    python 异步采集,网页爬虫编写 | 一步一步学python
    吉林省明日科技有限公司
    简单分析C之Curl模块同php的curl和python的pycurl模块的关系
    fputs
    v专用链接破解器 专用链接破解器
    crawler jd
  • 原文地址:https://www.cnblogs.com/Hsong/p/15413785.html
Copyright © 2011-2022 走看看