像纸质笔记本一样给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,则可以这样: 页面 ...
随机推荐
- paloalto防火墙安装内容和软件更新
1.为了确保您始终不会受到最新威胁(包括尚未发现的威胁)的攻击,您必须确保防火墙始终具有 Palo Alto Networks 发布的最新更新内容及软件. • Antivirus(防病毒)— 包括新的 ...
- windows安装oracle遇INS 30131 错误
win2008 64位安装oracle 11.2.0.4也遇到INS 30131 错误 描述: 原因 - 无法访问临时位置. 操作 - 请确保当前用户具有访问临时位置所需的权限. 附加信息: - 所有 ...
- 输入ip和端口号python脚本py文件
1.利用.py文件进行打开URL,编辑以下文件代码保存文件为login.py: # _*_ coding: cp936 _*__all_ = ['ip','port','root_id']ip='10 ...
- Django学习笔记(进阶篇)
Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html
- 感觉还是要学点c才牛逼
2019-04-06 $gcc -o hello hello.c //-o选项用来指定输出文件的文件名. gcc *.c -o hello //使用通配符编译当前目录下的所有c文件 $ gcc - ...
- 阿里oss图片上传
<script type="text/javascript" src="../../static/js/manage/oss_uploader.js"&g ...
- ibatis中的resultMap
优点: resultMap可以实现一种功能 当你是1对多 这种多张表查询的时候 你没办法 通过表连接来实现一个集合设置到一个实例里,但是通过resultMap里可以做到 根据关联的字段 查询到一个集合 ...
- 配置了yum本地源
测试机不能联网 所以不能直接安装软件 只能配置本地源 1. 在联网的电脑上下载与Linux内核版本相同的镜像 2. 把此安装镜像放在此Linux测试机上 比如放在家目录下 /home/ ...
- 使用kbmmw smarthttpservice 简单返回数据库结果
这个很简单,直接上码. 服务器端声明过程 [kbmMW_Rest('method:get, path:querytable')] [kbmMW_Method] function querytable( ...
- JDBC学习(含转载)
首先连接数据库: Class.forName("com.mysql.jdbc.Driver");//加载jdbc驱动 Connection conn=DriverManager.g ...