首页 > 技术文章 > 3.10 针对于iscroll 使用y获取滚动高度

miaomiao8899 2016-03-10 11:24 原文

今天在做实际手机端操作的时候,发现了这个

<ul class="wind-alert-ul" style="transform-origin: 0px 0px 0px; position: absolute; top: -200px; left: 0px;">
                        <li>&nbsp;</li>
                        <li>关闭</li>
                        <li>低速</li>
                        <li>中速</li>
                        <li>高速</li>
                        <li>关闭</li>
                        <li>低速</li>
                        <li>中速</li>
                        <li>高速</li>
                        <li>关闭</li>
                        <li>低速</li>
                        <li>中速</li>
                        <li>高速</li>
                        <li>关闭</li>
                        <li>&nbsp;</li>
                    </ul>

发现在滚动的时候,top的值是变化的,那么是不是可以通过这个top值来获取滚动的高度,结果又了如下的写法

onScrollEnd:function(){
                var top=$(".wind-alert-ul").css("top");
                alert(top);
                var number=parseInt(top.split('px')[0].substring(1));
                alert(number);
                $(".ok").click(function(){
                    var text=$(".wind-alert-ul li:eq("+number+")").get(0);
                    $(".wind-set-b").text(text.innerHTML);
                    
                    
                })
            }

测试发现在电脑是可以的,但是实际上再手机端由于浏览器的差别会有锁不同,在uc上浏览器测试发现弹出的top值一直都是auto,如果是这样的话,那么number也就无法进行计算

发现了这个问题之后,请教了同事,其实在iscroll.js中可以使用y来获取滚动垂直初始位置,将位置转化为正数,然后可以通过除以Li的高度去找到现在处于的li的位置,由于在布局的时候,多加了一个&nbsp所以需要在位置上加上1,将其中的内容进行替换就可以了

修改后的代码如下:

    onScrollEnd:function(){
                console.log(this.y);
                var number=(Math.abs(this.y))/50+1;
                $(".ok").click(function(){
                    var text=$(".wind-alert-ul li:eq("+number+")").get(0);
                    $(".wind-set-b").text(text.innerHTML);
                    
                    
                })
            }

经测试,手机端显示正常,可以弹出正常的滚动高度

推荐阅读