异步加载scrollTop不生效问题解决

本文详细介绍了在异步加载数据并追加到DOM元素后,如何确保页面滚动条自动滚动至底部的方法。通过在数据加载完成后的回调函数中调用scrollTop方法,实现了消息列表的自动滚动,解决了异步加载导致的scrollTop不生效问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异步加载数据然后append之后,出现滚动条,然后我想把滚动条置底.

遇到的问题:scrollTop不生效

解决方案:scrollTop需要在异步加载完成后再调用,因为是异步的,在去后台获取数据的时候,如果scrollTop就触发了,那么就出现不生效的情况

        function getContent()        
        {
            var url = '192.168.30.128/index.php/api/index/getContent';
            $.ajax({
                type: 'post',
                url: url,
                data : {'from_id':from_id,'to_id':to_id},
                success: function(res){
                    
                    if (res.status == 1) {
                        // console.log(res.data)
                        $(res.data).each(function(index,content){
                            // console.log(content)
                            if(content.from_id == from_id){
                                var html = '<div class="msg guest"><div class="msg-right" customer="游客"><div class="msg-host"><img src="/admin/images/a.jpg" alt=""></div><div class="msg-ball" title="今天 17:52:06">'+content.content+'</div></div></div>'
                                $('#msgs').append(html)
                            }else{
                                var html = '<div class="msg robot"><div class="msg-left" id="welcomeLeft" worker="用户"><div class="msg-host photo" id="welcomeIcon" style="background-image: url(&quot;https://www.v5kf.com/files/icons/201711/15118623985.png&quot;);"></div><div class="msg-ball" id="welcomeBall"><span>'+content.content+'</span></div></div>'
                                $('#msgs').append(html)
                            }
                            // 置底
                            $(".pnl-msgs").scrollTop($(".pnl-msgs")[0].scrollHeight)
                        });
                    }else{
                        alert(res.msg)
                    }

                },			
                error:function(){
                //抛出异常
                    alert('error');    
                }
            }); 
        }

### 实现 `el-autocomplete` 组件的分页功能 为了实现在 Element UI 的 `el-autocomplete` 组件中加入分页功能,可以考虑自定义数据获取逻辑并控制每次请求的数据量。由于官方并没有直接提供分页支持,因此需要通过一些技巧来模拟这一行为。 #### 自定义远程搜索方法 可以通过配置 `fetch-suggestions` 属性来自定义远程搜索方法,在该回调函数内部处理分页逻辑: ```javascript methods: { handleFetchSuggestions(queryString, cb) { this.currentPage = 1; this.loadMoreData(queryString).then(data => { this.suggestions = data.items; setTimeout(() => { cb(this.suggestions); }, 200 * Math.random()); }); }, loadMoreData(keyword){ return new Promise((resolve,reject)=>{ // 模拟异步请求接口 axios.get('/api/search',{ params:{ q:keyword, page:this.currentPage++, size:10//每页条数 } }).then(response=>{ resolve({ items:response.data.results, has_more: response.data.has_more }) }).catch(error=>reject(error)) }) }, handleScroll(event) { const scrollTop = event.target.scrollTop; const scrollHeight = event.target.scrollHeight; const clientHeight = event.target.clientHeight; if (scrollTop + clientHeight >= scrollHeight && this.hasMoreItems) { this.loadMoreData().then(({items,has_more}) => { this.suggestions.push(...items); this.hasMoreItems = has_more; }); } } } ``` 上述代码片段展示了如何创建一个带有分页特性的自动补全组件[^1]。这里的关键在于当用户滚动到底部时触发额外的数据加载操作,并将新获得的结果追加到现有列表之后。 #### HTML 结构调整 为了让滚动事件生效,还需要适当调整 DOM 结构以确保能够监听到正确的元素上的滚动动作: ```html <div style="height: 300px; overflow-y: auto;" @scroll="handleScroll"> <el-autocomplete v-model="state" :fetch-suggestions="handleFetchSuggestions" placeholder="请输入内容"></el-autocomplete> </div> ``` 此部分HTML结构用于包裹`<el-autocomplete>`标签,以便于捕获其父级容器内的滚动事件[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值