• 伪Textatea的构建(div+table),以及相应的滚动条问题与safari上的优化


      在页面中创建一个不可编辑的文本块,并且文本块的篇幅较大,第一反应是创建一个textarea,并将它的disabled="disabled",并设置相应的scroll属性,就可以构建一个尚可的文本块。

      但这样的文本块存在许多的问题,最为严重的是textarea内部只允许纯文本,并不能识别html标签(较新的ie浏览器可识别标签,但包括chrome在内的主流浏览器不能识别),所以,一些特定的格式无法很好表达。并且,在一些版本的ie浏览器上,当设置disabled="disabled"后,滚动条也将被禁用,影响文本的正常阅读。参考了一些主流的做法,感觉比较可行的是div+table的布局方案。示例代码如下:

    1 <div id="div_get" style="700px;overflow:scroll;height:400px;overflow-x:hidden">
    2     <table id="tb_get" style="700px;" >
    3     </table>           
    4 </div>

      首先创建一个div,设置这个层的长与宽,设置overflow:scroll,表示当层中的内容大于层所设置的大小后,启用滚动条进行拓展,overflow-x:hidden为禁用纵向的滚条,这里只是为了美观目的。创建层后,通过向层内添加html,一定程度上已经完成了Textatea关于实现不可编辑文本块的功能。但为了方便布局,以及从数据库中抓取数据用AJAX填入,我又用到了table,在这里我只是设置了表格的宽度。在pc端的主流浏览器中一切正常,但放到iphone的safari测试时,发现滚动条并不是停在预期的位置,而是卡在某处,通过对浏览器中的scrollHeight的比较,iphone上的长度会长于其他浏览器,走了各种弯路后发现,需要设置table的长度,可以有效防止滚动条的位置超出预期。至于长度,建议与对应层的长度相同。
      

      由于需要,当AJAX放入内容,需要将滚动条定位到最下方,可以通过以下js实现:

        document.getElementById("id").scrollTop = document.getElementById("id").scrollHeight;

        这里的id是div的,注意不是table的

      考虑到,当用户阅读内容,如果AJAX刷新,直接将滚动条移到最下方,十分不友好,于是乎,加一判断条件document.getElementById("id").scrollTop == 0,仅当滚动条在最上方时执行此操作(刷新完滚动条一般在最上处,而用户阅读时,滚动条移位,则不触发这项操作)。

     

  • 相关阅读:
    尝试消除switch
    JsUnit的测试套件
    GetCallbackEventReference对我来说太复杂了
    实现获取客户端的MAC地址(2)
    控件开发复习
    在VS2008的JScript编辑器中显示为命名空间
    函数参数修饰符out、ref及空白的区别
    检测代码位置的比较(C#代码VS存贮过程)
    发布时,正在使用的用户出错
    js特效,加速度,图标跳动
  • 原文地址:https://www.cnblogs.com/linhan/p/3574620.html
Copyright © 2020-2023  润新知