像纸质笔记本一样给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,则可以这样: 页面 ...
随机推荐
- shell中脚本调试----学习
1.使用dos2unix命令处理在windows下开发的脚本 将windows下编辑的脚本放置到linux下执行的情况如下: [root@ks ~]# cat -v nginx.sh #!/bin/b ...
- android 7.0+ FileProvider 访问隐私文件 相册、相机、安装应用的适配
从 Android 7.0 开始,Android SDK 中的 StrictMode 策略禁止开发人员在应用外部公开 file:// URI.具体表现为,当我们在应用中使用包含 file:// URI ...
- 20164319 刘蕴哲 Exp4:恶意代码分析
[实验内容] ①系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果.目标就是找出所有连网的程序,连了哪里,大约干了 ...
- python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法
gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...
- 消息中间件和JMS介绍
在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B ...
- python json.dumps()函数输出json格式,使用indent参数对json数据格式化输出
在python中,要输出json格式,需要对json数据进行编码,要用到函数:json.dumps json.dumps() :是对数据进行编码 #coding=gbkimport json dict ...
- EasyPR源码剖析(3):车牌定位之颜色定位
一.简介 对车牌颜色进行识别,可能大部分人首先想到的是RGB模型, 但是此处RGB模型有一定的局限性,譬如蓝色,其值是255,还需要另外两个分量都为0,不然很有可能你得到的值是白色.黄色更麻烦,它是由 ...
- JSP 页面中插入图片
第一步 在 JSP 页面中插入图片 EL 表达式 ${pageContext.request.contextPath } 的值为当前的项目名称 <html> ... <body> ...
- zz-人生感悟
1. 社交感想 首先来看一下聪明人和普通人的区别是什么? 普通人思考问题都是一步一步的来,由A推理出B,B推导到C,再推导出D,最后得出E,然而聪明人却可以由A直接推算到E. 这就像开车,普通人的是手 ...
- BUAAOO第二单元多线程电梯作业总结
第二单元多线程作业需要保证线程安全