zoukankan      html  css  js  c++  java
  • js 框架内laydate因内部滚动导致控件偏移解决办法

     问题背景:

    根据项目要求,为功能页添加时间控件。最初选用的laydate满足需求,所以就一直使用来着。

    最初版本采用laydate页面都比较短,没有过滚动条。

    这次时间控件所在位置在页面底端,发现,框架内laydate因内部滚动导致控件偏移......

    控件介绍(本段内容来自->传送门

    你是时候换一款日期控件了,而layDate非常愿意和您成为工作伙伴。她致力于成为全球最用心的web日期支撑,为国内外所有从事web应用开发的同仁提供力所能及的动力。她基于原生JavaScript精心雕琢,兼容了包括IE6在内的所有主流浏览器。她具备优雅的内部代码,良好的性能体验,和完善的皮肤体系,并且完全开源,你可以任意获取开发版源代码,一扫某些传统日期控件的封闭与狭隘。layDate本着资源共享的开发者精神和对网页日历交互无穷的追求,延续了layui一贯的简单与易用。她遵循LGPL协议,您可以免费将她用于任何个人项目。

    选择理由

    layDate除了包含日期范围限制、开始日期设定、自定义日期格式、时间戳转换、当天的前后若干天返回、时分秒选择、智能响应、自动纠错、节日识别,快捷键操作等常规功能外,还拥有更多趋近完美的解决方案。

    科学的接口设计1
    她并不提倡API的数量性,而是尽可能呈现最人性合理的接口,减少使用成本。
    一流的代码驱动2
    layDate完全用原生JavaScript实现,代码采用自由灵活风格,内部封装了众多轻量级的方法引擎,保证了良好的速度体验和接近于零的代码冗余.
    人性的皮肤体系3
    她非常注重外观设计,因此她提供了非常强大的皮肤选择支持,不仅官方会提供海量的皮肤下载,您还可以很方便地按照喜好去自定义皮肤,我们非常欢迎您能够贡献皮肤包,具体操作事宜请查看皮肤库页面。

    ---------这是一条自来水分割线------------

    正文

    我们平时看到的laydate是这个样子的~

    项目是含有上下左右四个框,所以,涉及画面过长时,通常我们看到的滚动条都是在right部分的。这和窗体滚动条是有区别的。

    laydate具有良好的稳定性,特别是空间稳定性,它能相对窗体滚动调整位置。但是感受不到框架内部滚动(我尝试过用$('#right').scroll(function(){...})不好使……理论上应该可以?)图如下。

    所以尝试了下面的方式进行修改:

    1 HTML
    2 <input class="w150 laydate-icon fl" readonly="readonly" id="time" onclick="calShow()" value="{$nowTime}">
     1 JS
     2 //面板显示
     3 function calShow() {$('.laydate_box').css('display','block');}
     4     
     5     ! function() {
     6         laydate.skin('default'); //切换皮肤,请查看skins下面皮肤库
     7         laydate({
     8             elem: '#time',
     9             format: 'YYYY年MM月', // 分隔符可以任意定义,该例子表示只显示年月
    10              choose: function(dates){ //选择好日期的回调
    11              alert(dates);
    12               }
    13         }); //绑定元素 
    14     }();
    15 
    16 //面板隐藏
    17     var main_con = $(".main_con").scroll(function() {$('.laydate_box').css('display','none')});

     最初想法是固定面板在输入框下面,随right的滚动条移动。未果……

    所以修改成,点击的时候弹出面板,保持原功能不变。在鼠标滚动的时候,让面板消失。遇到的问题是,消失之后再次点击,面板出现在第一次点击的位置。依旧偏移……

     找到了laydate的重置面板位置功能------reset(),改写成最后版本:

     1 function calShow() {$('.laydate_box').css('display','block');laydate.reset();}
     2     
     3     ! function() {
     4         laydate.skin('default'); //切换皮肤,请查看skins下面皮肤库
     5         laydate({
     6             elem: '#time',
     7             format: 'YYYY年MM月', // 分隔符可以任意定义,该例子表示只显示年月
     8              choose: function(dates){ //选择好日期的回调
     9              alert(dates);
    10               }
    11         }); //绑定元素 
    12     }();
    13 
    14     var main_con = $(".main_con").scroll(function() {$('.laydate_box').css('display','none')});

    实际上,在我们选择日期的时候,也不会考虑滚来滚去面板是否还在,只要想选择的时候出现就可以。所以,本次修改基本达到了设计目的。


    又一个原创文章,给自己赞一个~

    这一定还不是最优方法,如果阅读这篇文章有兴趣的朋友可以和我讨论一下~还请赐教嘿嘿

    (づ ̄3 ̄)づ╭❤~

    如果你觉得本文不错,想要转载,还请希望注明出处~毕竟自己做的不容易~嘿嘿

  • 相关阅读:
    freespire.xls导出数据是提示Error in Cell: E10257-Index was outside the bounds of the array."=_=".
    支持多语言Setting up a service which supports multiple languages in web API
    SVN重命名后,不允许提交
    .net framework4.6项目的dll升级后,未找到方法“System.String.GetPathsOfAllDirectoriesAbove”解决
    code first System.Data.Entity.Infrastructure.CommitFailedException: An error was reported while committing a database transaction but it could not be determined whether the transaction succeeded
    mysql中查看ef或efcore生成的sql语句
    错误 NETSDK1007 找不到“E:ProjectMyProjectMyProject.CommonMyProject.Utility.csproj”的项目信息。这可以指示缺少一个项目引用。 MyProject.Data C:Program Filesdotnetsdk2.2.107SdksMicrosoft.NET.Sdk argetsMicrosof
    类中被final修饰的成员变量需要初始化
    方法优化,减少调用时间
    maven mirror
  • 原文地址:https://www.cnblogs.com/6luv-ml/p/6825571.html
Copyright © 2011-2022 走看看