像纸质笔记本一样给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,则可以这样: 页面 ...
随机推荐
- php查询mysql中的json编码后的字符串内容的方法
问题 mysql里存的是json编码后的字符串,其中中文会被转为unicode码,所以直接查询是查询不到的. mysql里的查询如 like "%\u6211\u662f%" 也是 ...
- 'BAPI_MESSAGE_GETDETAIL' 用法
其中message class是在se91里创建的 call function 'BAPI_MESSAGE_GETDETAIL' exporting id = msg_class “m ...
- 记录一次网站邮箱(STMP)被恶意伪造事件
网站运行了一段时间了,最近用户增加的比较多,突然有用户反馈说遇到骗子了,给我看了他跟骗子的邮件记录,发现骗子竟然可以用我们域名的邮件发邮件,真是被惊吓到了,赶紧开始查找问题. 首先怀疑是企业邮箱密码泄 ...
- windows server 2012 远程桌面不好使
下面的文章里讲的比较详细 http://www.hfkehu.cn/thread-4382-1-1.html 我遇到的问题是第一种,因为是刚装的机器,刚连上网时,选择如下设置时,因为鼠标一点别的地方, ...
- Git上传代码的步骤
1.git status 列出来所有修改的文件2.git add 所有的文件列表,或者git add -A,添加所有文件到Add列表 3.git reset --hard 取最新的git标签 4.gi ...
- zookeeper资料
ZooKeeper 入门
- laravel-安装验证码扩展
第一步:找到验证码扩展 链接:https://packagist.org/packages/mews/captcha 第二步:安装 环境要求:验证码需要开启php的gd库 . 执行命令(有时候安装会出 ...
- [总结]给pcDuino v2编译Linux kernel
1.版本问题 推荐选择pcdunio提供的官方的kernel. 当然可以选用www.github.com/linux-sunxi 中的kernel,不过有很多驱动都用不了包括arduino. 我尝试了 ...
- 移动端比较好用的滑动条 vue-slider-component
安装: npm install vue-slider-component <template> <div> <vue-slider v-model="value ...
- 你了解栈溢出StackOverFloweExeption的原理吗?
StackOverflowException的常见几种引起的方式 1.类的相互引用 2.方法的循环调用 3.属性Set方法的死循环调用 class Program : IProgram { IPers ...