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

像纸质笔记本一样给div,textarea添加行的分割线的更多相关文章

  1. H5新增属性contenteditable(不用JS,实现div模拟textarea高度自增长)

    无意中看到一篇博客介绍了contenteditable这个属性——不需用JS,只需在div里加上contenteditable="true",即可实现div模拟textrarea( ...

  2. [CSS]textarea设置下划线格式

    功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线  2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...

  3. 文本框 textarea 动态显示行数(简单文本编辑器)

    工作需求做一个文本编辑器简单的. 右边输入文字,左边会显示相应的代码行.清空也会变为1. 废话不多说上代码,自己理解. <style type="text/css"> ...

  4. textarea与XSS攻击

    textarea用法 一般是用来接收用户输入,用于提交到服务器端,例如 网站的评论框. 如果此框也用于显示服务器端回传的内容,则有如下两种用法 法1 后台直接插入 <textarea>&l ...

  5. Js 与 TextArea

    当给一个js变量赋值一个有换行的值得时候,就会报错: <!DOCTYPE HTML> <html> <head> <script src="http ...

  6. 用JQuery编写textarea,input,checkbox,select

    今天学习怎样用JQuery编写一些小的代码,小小的试了一下编写一个textarea,代码如下: <!DOCTYPE HTML> <html lang="en"&g ...

  7. JS控制文本框textarea输入字数限制的方法

    <html> <head runat="server"> <title></title> <script type=" ...

  8. 文本域textarea显示输入剩余字数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. jQuery easyUI Pagination控件自定义div分页(不用datagrid)

    一般后台管理页面分页是通过datagrid加Pagination分页,但是如果前台页面没有用表格,例如博客的文章列表从上到下一般是到div分页, 这时如果还要用Pagination,则可以这样: 页面 ...

随机推荐

  1. paloalto防火墙安装内容和软件更新

    1.为了确保您始终不会受到最新威胁(包括尚未发现的威胁)的攻击,您必须确保防火墙始终具有 Palo Alto Networks 发布的最新更新内容及软件. • Antivirus(防病毒)— 包括新的 ...

  2. windows安装oracle遇INS 30131 错误

    win2008 64位安装oracle 11.2.0.4也遇到INS 30131 错误 描述: 原因 - 无法访问临时位置. 操作 - 请确保当前用户具有访问临时位置所需的权限. 附加信息: - 所有 ...

  3. 输入ip和端口号python脚本py文件

    1.利用.py文件进行打开URL,编辑以下文件代码保存文件为login.py: # _*_ coding: cp936 _*__all_ = ['ip','port','root_id']ip='10 ...

  4. Django学习笔记(进阶篇)

    Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html

  5. 感觉还是要学点c才牛逼

    2019-04-06 $gcc -o hello hello.c  //-o选项用来指定输出文件的文件名. gcc *.c -o hello  //使用通配符编译当前目录下的所有c文件 $ gcc - ...

  6. 阿里oss图片上传

    <script type="text/javascript" src="../../static/js/manage/oss_uploader.js"&g ...

  7. ibatis中的resultMap

    优点: resultMap可以实现一种功能 当你是1对多 这种多张表查询的时候 你没办法 通过表连接来实现一个集合设置到一个实例里,但是通过resultMap里可以做到 根据关联的字段 查询到一个集合 ...

  8. 配置了yum本地源

    测试机不能联网  所以不能直接安装软件  只能配置本地源 1.   在联网的电脑上下载与Linux内核版本相同的镜像 2.   把此安装镜像放在此Linux测试机上  比如放在家目录下  /home/ ...

  9. 使用kbmmw smarthttpservice 简单返回数据库结果

    这个很简单,直接上码. 服务器端声明过程 [kbmMW_Rest('method:get, path:querytable')] [kbmMW_Method] function querytable( ...

  10. JDBC学习(含转载)

    首先连接数据库: Class.forName("com.mysql.jdbc.Driver");//加载jdbc驱动 Connection conn=DriverManager.g ...