• 像纸质笔记本一样给div,textarea添加行的分割线


    想要给textarea添加一个背景图来实现

    但是背景图有几个问题,

    1、每个div或者textarea的line-height不一样,对于每个不同的line-height都需要一个不同的背景图

    2、当有滚动条出现时,拉动滚动条背景图分割线不会变,导致样式错位

    因此使用传统的图片作为背景图不可行,因为line-height是变化的,并且有滚动条的时候背景图也应该变化。

    问题找到了,就要找到解决问题的访问,那就是使用canvas动态生成背景图。

    具体不用讲解了,看代码,做成了一个jquery插件的形式。

    直接调用$("textarea,div").backgroundLine();就行

    截个图:

    (function ($) { 
        var  setBG=function(_this) {
            if ($(_this).css("visibility") == "hidden" || $(_this).css("display") == "none" )
                return;
            var lineHeight = parseFloat($(_this).css("line-height"));
            if (isNaN(lineHeight)) {
                lineHeight = 25;
                $(_this).css("line-height", lineHeight + "px");
            }
            var padding = $(_this).scrollTop() % lineHeight;
            var bgimg = createBG(lineHeight, padding);
            if (bgimg != null) {
                $(_this).css("background", "url(" + bgimg + ")   repeat");
                $(_this).on("scroll", function () {
                    var lineHeight = parseFloat($(_this).css("line-height"));
                    var padding = $(_this).scrollTop() % lineHeight;
                    var bgimg = createBG(lineHeight, padding);
                    $(_this).css("background", "url(" + bgimg + ") left top repeat");
                });
            }
        } 
        this.___BGList = {};
        var createBG=function( height, padding) {
            var key = height + "-" + padding; 
            var width = 4;
            if (this.___BGList[key] != null) {
                return this.___BGList[key];
            }
            var canvas = document.createElement("canvas");
            if (canvas.getContext) {
                var context = canvas.getContext("2d");
                canvas.width = width;
                canvas.height = height;
                canvas.lineWidth = 1;
                canvas.fillStyle = "#000000";
                context.fillRect(0, height - padding - 1, 1, 1);
                var dataURL = canvas.toDataURL('image/png'); 
                this.___BGList[key] = dataURL;
                return dataURL;
            }
            return null;
        }
        $.fn.backgroundLine = function (options) {
            this.each(function () { 
                setBG(this);
            });
        };
    })(jQuery);
  • 相关阅读:
    HttpServlet RequestDispatcher sendredirect和forward
    java中判断字符串是否为数字的方法的几种方法
    apk 解包 打包
    js cookie
    js中的this关键字
    Myeclipse 添加Android开发工具
    List<T> List<?> 区别用法
    mysql 命令
    BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
    【学习笔记】求矩阵的特征多项式
  • 原文地址:https://www.cnblogs.com/chegan/p/10216577.html
Copyright © 2020-2023  润新知