my97日期控件彈出位置顯示異常

使用my97日期選擇控件的時候,若是整個頁面是有滾動條的,根據觸發顯示日期的控件的父控件的position不一樣會顯示不一樣的狀況javascript

一、position不爲fixed則滑動滾動條,顯示的日期層不會出現異常位移,以下圖css

    滾動條不動,正常顯示html

    滾動條沒去,正常顯示java

二、position爲fixed則滑動滾動稅票,顯示的日期層會根據滾動條的移動而移動,以下圖ide

    滾動條不動,正常顯示spa

    滾動條滑動,異常位移code

對於第二種狀況解決方法以下:orm

寫一個方法 以下:htm

function showDate() {
        $('iframe[hidefocus]').parent().hide();//用於強制從新計算座標值
        new WdatePicker();
        var scrollTop = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);//滾動條的偏移值
        var oldTop = $('iframe[hidefocus]').parent().css('top').replace('px', '');//日期控件最終計算的top值
        var newTop = oldTop - scrollTop//日期控件的top值減去滾動條的偏移值就是當前日期控件的位置
        var iCount = 0;
        //下面用setInterval 主要是爲了第一次加載的時候 top 設置會先於WdatePicker完成
        var intHandle = setInterval(function () {
            var top = $('iframe[hidefocus]').parent().css('top').replace('px', '');
            iCount++;
            if (iCount < 10) {
                $('iframe[hidefocus]').parent().css({
                    'position': 'fixed',
                    'top': newTop
                });
            }
            else {
                clearInterval(intHandle);
            }
        }, 100);
    }

觸發的控件的onclick事件直接調用 此方法,完成頁面html和調用代碼以下blog

<h2>Index</h2>

<div style="height: 1000px; background-color: yellow">
</div>
<div style="position: absolute; top: 50%; left:50%; background-color: blue;">
    <input type="text" class="form-control" onclick="showDate();"/>
</div>
<script src="~/Scripts/plugin/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript">
    function showDate() {
        $('iframe[hidefocus]').parent().hide();//用於強制從新計算座標值
        new WdatePicker();
        var scrollTop = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);//滾動條的偏移值
        var oldTop = $('iframe[hidefocus]').parent().css('top').replace('px', '');//日期控件最終計算的top值
        var newTop = oldTop - scrollTop//日期控件的top值減去滾動條的偏移值就是當前日期控件的位置
        var iCount = 0;
        //下面用setInterval 主要是爲了第一次加載的時候 top 設置會先於WdatePicker完成
        var intHandle = setInterval(function () {
            var top = $('iframe[hidefocus]').parent().css('top').replace('px', '');
            iCount++;
            if (iCount < 10) {
                $('iframe[hidefocus]').parent().css({
                    'position': 'fixed',
                    'top': newTop
                });
            }
            else {
                clearInterval(intHandle);
            }
        }, 100);
    }
</script>

最終顯示結果以下,日期顯示框沒有位移

相關文章
相關標籤/搜索