LayUI table中使用progress渲染问题
今天做施工进度进度条的时候,发现如果直接设置返回,是无效果的,需要在LayUI数据表格渲染完成后,重新渲染element元素。因为table渲染完成并不会渲染其他组件。table.render({
elem: "#LAY-app-list-xxx",
url: "xxx"
, cols: [[
xxxxxx
field: 'Progress', width: 200, title: '维修进度', align: "center", templet: function(d) {
var color = '';
if(30<d.Progress && d.Progress<100){
color='layui-bg-orange'
}else if(0<d.Progress && d.Progress<=30){
color='layui-bg-red'
return '<div class="layui-progress layui-progress-big" lay-showpercent="true"><div class="layui-progress-bar '+color+'" lay-percent="'+d.Progress+'%"></div></div><br>'
,xxxx
,xxxxx
, done: function (res, currentCount) {
//table渲染完成后渲染element进度条
element.render();
2021年06月09日
869 阅读
今天在看文章 浅谈前端水印 的时候想到如果要整个网页添加水印怎么处理呢?搜索到一个简单的方法,测试可用。可视水印let watermark = {}
let setWatermark = (str) => {
let id = '1.23452384164.123412415'
if (document.getElementById(id) !== null) {
document.body.removeChild(document.getElementById(id))
let canvas = document.createElement('canvas')
canvas.width = 280;
canvas.height = 120;
let context = canvas.getContext('2d');
context.rotate(-20 * Math.PI / 180);
context.font = '15px Vedana';
context.fillStyle = 'rgba(180, 180, 180, 0.3)';
context.textAlign = 'left';
context.textBaseline = 'Middle';
context.fillText(str, canvas.width / 20, canvas.height);
let div = document.createElement('div');
div.id = id;
div.style.pointerEvents = 'none';
div.style.top = '3px';
div.style.left = '0px';
div.style.position = 'fixed';
div.style.zIndex = '100000';
div.style.width = document.documentElement.clientWidth + 'px';
div.style.height = document.documentElement.clientHeight + 'px';
div.style.background = 'url(' + canvas.toDataURL('image/png') + ') left top repeat';
document.body.appendChild(div);
return id;
// 该方法只允许调用一次
watermark.set = (str) => {
setWatermark(str);
// let id = setWatermark(str)
// setInterval(() => {
// if (document.getElementById(id) === null) {
// id = setWatermark(str)
// }
// }, 2000)
window.onresize = () => {
setWatermark(str)
export default watermark;使用方法:watermark.set('xxxxxx')参考: 网页添加水印隐藏水印作者:Mize
链接:https://www.zhihu.com/question/50677827/answer/122388524
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
function watermark(settings) {
//默认设置
var defaultSettings={
watermark_txt:"text",
watermark_x:20,//水印起始位置x轴坐标
watermark_y:20,//水印起始位置Y轴坐标
watermark_rows:5,//水印行数
watermark_cols:5,//水印列数
watermark_x_space:10,//水印x轴间隔
watermark_y_space:90,//水印y轴间隔
watermark_color:'#000000',//水印字体颜色
watermark_alpha:0.005,//水印透明度
watermark_fontsize:'80px',//水印字体大小
watermark_font:'微软雅黑',//水印字体
watermark_width:500,//水印宽度
watermark_height:90,//水印长度
watermark_angle:25//水印倾斜度数
//采用配置项替换默认值,作用类似jquery.extend
if(arguments.length===1&&typeof arguments[0] ==="object" )
var src=arguments[0]||{};
for(key in src)
if(src[key]&&defaultSettings[key]&&src[key]===defaultSettings[key])
continue;
else if(src[key])
defaultSettings[key]=src[key];
var oTemp = document.createDocumentFragment();
//获取页面最大宽度
var page_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
//获取页面最大长度
var page_height = Math.max(document.body.scrollHeight,document.body.clientHeight);
//如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
if (defaultSettings.watermark_cols == 0 || (parseInt(defaultSettings.watermark_x + defaultSettings.watermark_width *defaultSettings.watermark_cols + defaultSettings.watermark_x_space * (defaultSettings.watermark_cols - 1)) > page_width)) {
defaultSettings.watermark_cols = parseInt((page_width-defaultSettings.watermark_x+defaultSettings.watermark_x_space) / (defaultSettings.watermark_width + defaultSettings.watermark_x_space));
defaultSettings.watermark_x_space = parseInt((page_width - defaultSettings.watermark_x - defaultSettings.watermark_width * defaultSettings.watermark_cols) / (defaultSettings.watermark_cols - 1));
//如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
if (defaultSettings.watermark_rows == 0 || (parseInt(defaultSettings.watermark_y + defaultSettings.watermark_height * defaultSettings.watermark_rows + defaultSettings.watermark_y_space * (defaultSettings.watermark_rows - 1)) > page_height)) {
defaultSettings.watermark_rows = parseInt((defaultSettings.watermark_y_space + page_height - defaultSettings.watermark_y) / (defaultSettings.watermark_height + defaultSettings.watermark_y_space));
defaultSettings.watermark_y_space = parseInt(((page_height - defaultSettings.watermark_y) - defaultSettings.watermark_height * defaultSettings.watermark_rows) / (defaultSettings.watermark_rows - 1));
var x;
var y;
for (var i = 0; i < defaultSettings.watermark_rows; i++) {
y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
for (var j = 0; j < defaultSettings.watermark_cols; j++) {
x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;
var mask_div = document.createElement('div');
mask_div.id = 'mask_div' + i + j;
mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
//设置水印div倾斜显示
mask_div.style.webkitTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
mask_div.style.MozTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
mask_div.style.msTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
mask_div.style.OTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
mask_div.style.transform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
mask_div.style.visibility = "";
mask_div.style.position = "absolute";
//选不中
mask_div.style.left = x + 'px';
mask_div.style.top = y + 'px';
mask_div.style.overflow = "hidden";
mask_div.style.zIndex = "9999";
mask_div.style.pointerEvents = "none";
//mask_div.style.border="solid #eee 1px";
mask_div.style.opacity = defaultSettings.watermark_alpha;
mask_div.style.fontSize = defaultSettings.watermark_fontsize;
mask_div.style.color = defaultSettings.watermark_color;
mask_div.style.textAlign = "center";
mask_div.style.width = defaultSettings.watermark_width + 'px';
mask_div.style.height = defaultSettings.watermark_height + 'px';
mask_div.style.display = "block";
oTemp.appendChild(mask_div);
document.body.appendChild(oTemp);
watermark({ watermark_txt:'hello'})浏览器终端下粘贴上面的代码,它的作用是在当前页面上增加了一个透明度只有0.005的很多hello的水印。截图后,是看不出来水印的,把图片放到PS里面,建一个图层在上面。全部填充为黑色,混合模式选择正片叠底这一类的(也就是让亮的更亮,暗的更暗),就可以看到水印了~所以两者结合起来😎,有时间整理下,这里先做下记录。
2021年06月02日
727 阅读
array.forEach和$.each()及$().each()的用法与区别
1.$.each():方法是jQuery中的方法,用于遍历数组或对象。用法:$.each(array,function(index,value){...}),有两个参数,第一个为待遍历的数组或对象,第二个为回调函数,函数中的两个参数,index为当前遍历到的元素下标或对象的key,value为当前遍历到的数组元素或对象的值。2.$().each():一看带有$,顾名思义也是jQuery中的方法,多用于遍历dom数组。用法$('selector').each(function(index,value){...})。3.forEach:即Array.prototype.forEach,只有数组才有的方法,等同于过去的for循环遍历数组。用法:arr.forEach(function(item,index,array){...}),其中回调函数有3个参数,item为当前遍历到的元素,index为当前遍历到的元素下标,array为数组本身。forEach方法不会跳过null和undefined元素。比如数组[1,undefine,null, ,2]中的四个元素都将被遍历到,注意与map的区别。【1】$('selector').each(function(index,value){...})$("input[name='ch']").each(function(index,value){
if($(this).attr("checked")==true){
//一些操作代码
}【2】$.each(array,function(index,value){})遍历对象
var obj = { one:1, two:2, three:3, four:4, five:5 };
$.each(obj, function(key, val) {
console.log(key+":"+val);
var arr1 = [ "one", "two", "three", "four", "five" ];
$.each(arr1, function(){
alert(this);
});【3】arr.forEach(function(item,index,array){...})var arr=[1,2,3,4];
arr.forEach(function(val,index,arr){
arr[index]=2*val;
console.log(arr);//结果是修改了原数组,为每个数乘以2
2021年05月14日
408 阅读
table.on('edit("tableId")', function (obj) {
// 单元格编辑之前的值
var oldText = $(this).prev().text();
if (obj.data.IsPost == 1) {
//重新赋值
$(this).val(oldText);
layer.msg('已邮寄信息不可修改', { icon: 5, time: 2000 });
return;
var value = obj.value //得到修改后的值
, data = obj.data //得到所在行所有键值
, field = obj.field; //得到字段
2021年04月07日
161 阅读
Webpack踩坑 无法解析Jquery及webpack-cli
最近在学习Vue,使用到webpack的时候,出现了错误,可能是3和4的版本问题webpack-dev-server安装好webpack-dev-server后,需要在package.json 的scripts 增加代码 "dev": "webpack-dev-server""scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server"
然后此时报错了~~~The CLI moved into a separate package: webpack-cli一大堆,一开始没看懂,搜也没搜明白,最后发现好简单,实际就是安装webpack-cli就好了无法解析jquery Module not found: Error: Can't resolve 'jquery' in 'F:Studywebpack-studysrc'看到这个有点懵,我都安装了的,然后也能运行起来,结果就是报这个错。由于jquery.placholder.min.js将UMD用作加载策略,因此它认识到它是通过require- 必需的,并尝试以相同的方式要求使用jQuery:"object"==typeof module&&module.exports?require("jquery"):jQueryWebpack查看require("jquery")并尝试捆绑jQuery库(在node_modules中不存在)解决方案是将jQuery作为外部添加到您的webpack.config.js:{
externals: {
// require("jquery") is external and available
// on the global var jQuery
"jquery": "jQuery"
}当模块标记为外部模块时,Webpack不会捆绑该模块,而是使用全局变量。参考资料:webpack Can't resolve 'jquery'.em。。。。上边的并不合适。。。还是使用ProvidePlugin的吧自动加载模块,而不必到处 import 或 require 。new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})然后把import的地方干掉...参考资料:webpackjs ProvidePlugin.
2020年04月16日
17 阅读
JS/JQuery操作DOM元素笔记
原因自己目前在搭建一个.NET Core的框架,正在构建权限这块的东西,今天设置权限界面,需要使用JavaScript操作DOM元素,记录一下。页面大概是酱紫的(我使用的AdminLTE和LayUI,AdminLTE用的是一个大神改的,链接https://github.com/weituotian/AdminLTE-With-Iframe):我的需求就是如果用户要用除查询之外的权限,必须要有查询权限才可以,如果没有查询权限,则不能具有其他权限,这里记录的只是前端JavaScript的操作,不包含后台验证。比如我测试1下ces的管理选中的时候,要自动选中查询按钮。当查询按钮取消选中的时候,要把后边选中的按钮取消选中。主要是操作DOM模拟点击:$('.layui-form-checkbox').on('click',
function (e) {
debugger;
//如果是选中的话,判断是不是Query 查询权限,不是的话,要先选中查询权限
if (this.classList.contains("layui-form-checked")) {
//如果不是Query 并且Query 也没选中
if (this.previousElementSibling.name !== "Query" &&
!$(this).parent().find('input[name="Query"]').next()[0].classList.contains(
"layui-form-checked")) {
//让Query节点的那个点击选中
$(this).parent().find('input[name="Query"]').next().click();
} else {
//不是选中状态,判断是不是Query 如果是Query 取消选中,那么后边的也应该取消选中
if (this.previousElementSibling.name === "Query") {
$(this).parent().find('input[name!="Query"]').next().each(function(index, item) {
if (item.classList.contains("layui-form-checked")) {
$(item).click();
});知识点JQueryjQuery.parent(expr)//找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class")
jQuery.parents(expr)//类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素
jQuery.children(expr)//返回所有子节点,这个方法只会返回直接的孩子节点,不会返回所有的子孙节点
jQuery.contents()//返回下面的所有内容,包括节点和文本。这个方法和children()的区别就在于,包括空白文本,也会被作为一个jQuery对象返回,children()则只会返回节点
jQuery.prev()//返回上一个兄弟节点,不是所有的兄弟节点
jQuery.prevAll()//返回所有之前的兄弟节点
jQuery.next()//返回下一个兄弟节点,不是所有的兄弟节点
jQuery.nextAll()//返回所有之后的兄弟节点
jQuery.siblings()//返回兄弟姐妹节点,不分前后
jQuery.find(expr)//跟jQuery.filter(expr)完全不一样:
jQuery.filter()//是从初始的jQuery对象集合中筛选出一部分,而
jQuery.find()//的返回结果,不会有初始集合中的内容,比如$("p").find("span"),是从<p>元素开始找<span>,等同于$("p span")
JavaScript
var chils= s.childNodes; //得到s的全部子节点
var par=s.parentNode; //得到s的父节点
var ns=s.nextSibling; //获得s的下一个兄弟节点
var ps=s.previousSibling; //得到s的上一个兄弟节点
var fc=s.firstChild; //获得s的第一个子节点
var lc=s.lastChild; //获得s的最后一个子节点
2019年05月15日
49 阅读