像纸质笔记本一样给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);
像纸质笔记本一样给div,textarea添加行的分割线的更多相关文章
- H5新增属性contenteditable(不用JS,实现div模拟textarea高度自增长)
无意中看到一篇博客介绍了contenteditable这个属性——不需用JS,只需在div里加上contenteditable="true",即可实现div模拟textrarea( ...
- [CSS]textarea设置下划线格式
功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线 2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...
- 文本框 textarea 动态显示行数(简单文本编辑器)
工作需求做一个文本编辑器简单的. 右边输入文字,左边会显示相应的代码行.清空也会变为1. 废话不多说上代码,自己理解. <style type="text/css"> ...
- textarea与XSS攻击
textarea用法 一般是用来接收用户输入,用于提交到服务器端,例如 网站的评论框. 如果此框也用于显示服务器端回传的内容,则有如下两种用法 法1 后台直接插入 <textarea>&l ...
- Js 与 TextArea
当给一个js变量赋值一个有换行的值得时候,就会报错: <!DOCTYPE HTML> <html> <head> <script src="http ...
- 用JQuery编写textarea,input,checkbox,select
今天学习怎样用JQuery编写一些小的代码,小小的试了一下编写一个textarea,代码如下: <!DOCTYPE HTML> <html lang="en"&g ...
- JS控制文本框textarea输入字数限制的方法
<html> <head runat="server"> <title></title> <script type=" ...
- 文本域textarea显示输入剩余字数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jQuery easyUI Pagination控件自定义div分页(不用datagrid)
一般后台管理页面分页是通过datagrid加Pagination分页,但是如果前台页面没有用表格,例如博客的文章列表从上到下一般是到div分页, 这时如果还要用Pagination,则可以这样: 页面 ...
随机推荐
- Junit集成测试
Spring4.x高级话题(七):Spring的测试 一. 点睛 测试是开发工作中不可缺少的部分,单元测试只针对当前开发的类和方法进行测试,可以简单通过模拟依赖来实现,对运行环境没有依赖:但是仅仅单元 ...
- MR汇聚工具步骤
---------------------------------MR汇聚工具步骤------------------------------------- 1.需要连上141服务器 用户:root ...
- php核心技术与最佳实践(笔记一)
1.1面向对象的型与本 类是对象的抽象组织,对象是类的具体存在. 1.1.1对象的形 <?php class Person{ public $name; public $gender; publ ...
- spring boot自定义线程池以及异步处理
spring boot自定义线程池以及异步处理@Async:什么是线程池?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使 ...
- MAC使用超级终端
其实很简单. 先用ls看看/dev/tty.*哪个是具体的串口,我这里使用的edison的板子,所以插到macos上后可以看到的设备节点为: 只需要使用screen 命令即可,具体的命令格式如下: s ...
- linux下编译protobuf(可以编译成pb.go)
编译前需要安装gtest $ cd googletest $ cmake -DBUILD_SHARED_LIBS=ON . $ make $ sudo cp -a include/gtest /hom ...
- MySQL ERROR 1064(42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
通常出现该错误的原因是使用了 MySQL 的保留字 解决方法是对使用的保留字使用反引号 (Tab键上面)
- OO前三次作业分析
一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...
- 文件操作命令(replace)
Replace 命令: // 描述: 替换文件. // 语法: REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W ...
- RNQOJ 21 FBI数
如果字符串全是0输出B,全是1输出I,01混合输出F,如果字符串分解到只剩下一个字符的时候我们可以很简单的判断出来是B串还是I串,如果处在父节点的位置,这里运用递归,通过子节点的返回值来判断子节点是混 ...