当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 像纸质笔记本一样给div,textarea添加行的分割线

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

2019年01月04日  | 移动技术网IT编程  | 我要评论
想要给textarea添加一个背景图来实现 但是背景图有几个问题, 1、每个div或者textarea的line-height不一样,对于每个不同的line-height都需要一个不同的背景图 2、当有滚动条出现时,拉动滚动条背景图分割线不会变,导致样式错位 因此使用传统的图片作为背景图不可行,因为 ...

想要给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);

 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网