SVG精简压缩工具svgo简介和初体验


一、事情的起因

佛家讲求因果关系,种什么因,得什么果,比方说种了颗苹果树,就会结苹果。这里,扯到SVG的精简压缩也是有原因的,前年有分享过“PSD小图标变身SVG Sprites/font-face历险记”,其中展示了我处理SVG比较重要的一步,就是对设计师PSD源文件中的图标路径进行重新处理。在没有对设计师进行分享培训之前,有些细节可能就不会注意,例如,图形喜欢用路径叠加实现,而不是实实在在地勾勒出来;或者PSD看上去是好的,但是放大个100倍,就会发现,路径的转角和边缘都没对上。此时如果直接SVG,一是SVG文件大小大,二是最终的图像可能不是我们想要的。因此,需要在Adobe Illustrator中重新处理下,至少我是使用的这个软件。

有小伙伴可能会疑问:设计师自己挖的坑就让他自己去种苹果树好了,你佛光普照去帮忙光合作用干什么呢?

佛约:我不入地狱输入地狱。大家都听过这句话吧,所以,我们再看上面的疑问,怎么样,是不是听之有理,实则差矣!我呸……甩自己一个嘴巴子,“差”它个鬼大头……

“我不入地狱输入地狱”这种骗傻子自我安慰的话你也信,偶尔帮帮设计师同事那是可以的,搞搞关系以后有糖吃,虽然新郎不是你;但是,每每都是你来帮设计师修修补补设计失误,看上去是个好人,实际上,是拉低了整个团队的效率,你的时间应该用在更大价值的事情上。

当然,并不是要你直接撒手不管,而是直接授之以渔,你要做的事情,是好好地准备一次分享培训,在例会的时候给各位设计师GGMM科普下,首先SVG前程似锦,大家了解下面的技能以后好混饭吃;其次,大家作图要多多留心,路径细节,少用锚点;最后,传授AI处理细节和SVG导出大法。然后,把导出SVG的工作全部交给设计师同事,设计师玩AI很多年了,比你前端半吊子要强很多,效率也会高很多,物尽其用。身为前端的我们,就要做前端应该做的事情,什么呢,就是对设计师给我们的初稿SVG进行web化精简,当然是通过技术手段。

为何需要精简呢?因为,很多矢量编辑器,或者类似AI这样的矢量软件,导出来的SVG文件都会有很多其他冗余信息,举个例子,下面截图框框的这些鬼:

虽然icomoon.io这样的在线平台自动精简。

但是,1. 如果我们想要直接使用SVG文件怎么办?2. SVG文件需要频繁改动怎么办,每次都上传一边再下载很烦的?3. 你保证其他同事其他团队也乐于使用这些平台,而不是直接根植于项目中?

考虑到这些点,我们有必要在本地有一个可以方便对SVG进行精简的工具,最好,AI保存好,直接就出来精简版。有吗?有,就是本文要介绍的svgo, 精挑细选,业界比较认可,大家比较喜欢的SVG处理工具。

二、svgo简介

项目地址:https://github.com/svg/svgo, 目前4000+星星~ 随着SVG的高歌猛进,以后一定会平稳增加。

svgo是SVG Optimizer的简写,不过,我似乎更喜欢理解为SVG, go! 这是一个基于Nodejs的SVG文件优化工具。

为什么需要?
因为SVG文件,尤其从各种变假期导出的SVG,通常包含大量的无用信息,例如编辑器源信息,注释,因此元素,默认或者非最优值,以及其他一些不会影响渲染结果的可以移除或转换的内容。

能做什么?
SVGO基于插件模式构建,基本上所有的优化都是一个分离的插件。

目前有:

  • [ cleanupAttrs ] 清除换行,结束符以及重复空格
  • [ removeDoctype ] 删除文档声明
  • [ removeXMLProcInst ] 删除XML处理指令
  • [ removeComments ] 删除注释
  • [ removeMetadata ] 删除源信息
  • [ removeTitle ] 删除</code>标题(默认禁用)</li> <li>[ removeDesc ] 删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><desc></code>描述 (默认只有<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">desc</code>元素无意义的时候)</li> <li>[ removeUselessDefs ] 删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><defs></code>元素如果没有<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">id</code></li> <li>[ removeEditorsNSData ] 删除编辑器的命名空间,元素和属性</li> <li>[ removeEmptyAttrs ] 删除空属性</li> <li>[ removeHiddenElems ] 删除隐藏元素</li> <li>[ removeEmptyText ] 删除隐藏文本元素</li> <li>[ removeEmptyContainers ] 删除空的容器元素</li> <li>[ removeViewBox ]如果可以,删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">viewBox</code>属性(默认进行)</li> <li>[ cleanUpEnableBackground ] 如果可以,删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">enable-background</code>属性</li> <li>[ minifyStyles ] 使用CSSO最小化元素的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><style></code>内容</li> <li>[ convertStyleToAttrs ] 转换样式为属性值</li> <li>[ convertColors ] 转换颜色(从<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">rgb()</code>到<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">#rrggbb</code>, 从 <code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">#rrggbb</code>到<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">#rgb</code>)</li> <li>[ convertPathData ] 将路径数据转换为的相对路径和绝对路径中简短的那一个,过滤无用的分隔符,智能四舍五入以及其他很多处理</li> <li>[ convertTransform ] 合并多个transforms为一个, 转换矩阵为短命名,以及其他很多处理</li> <li>[ removeUnknownsAndDefaults ] 删除未知的元素内容和属性,删除值为默认值的属性/li></li> <li>[ removeNonInheritableGroupAttrs ] 删除不可基础组的”presentation”属性</li> <li>[ removeUselessStrokeAndFill ] 删除无用的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">stroke</code>和<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">fill</code>属性</li> <li>[ removeUnusedNS ] 删除没有使用的命名空间声明</li> <li>[ cleanupIDs ] 删除没有使用或者压缩使用的IDs</li> <li>[ cleanupNumericValues ] 数值四舍五入提高精度, 删除默认的’px’单位</li> <li>[ moveElemsAttrsToGroup ] 移动元素属性们到外面包裹的组元素上</li> <li>[ moveGroupAttrsToElems ] 移动一些组属性到内容元素上</li> <li>[ collapseGroups ] 合并无用的组</li> <li>[ removeRasterImages ] 删除点阵图像(默认禁用)</li> <li>[ mergePaths ] 合并多个路径为一个</li> <li>[ convertShapeToPath ] 转换一些基本图形为路径</li> <li>[ sortAttrs ] 元素属性排序使其像诗歌一样易读(默认禁用)</li> <li>[ transformsWithOnePath ] 通过里面一条路径实现transforms, 真实宽度剪裁, 垂直居中对齐以及SVG缩放拉伸(默认禁用)</li> <li>[ removeDimensions ] 如果<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">viewBox</code>就是当下尺寸限定,删除<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">width</code>/<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">height</code>属性(默认禁用)</li> <li>[ removeAttrs ] 通过正则删除属性 (默认禁用)</li> <li>[ addClassesToSVGElement ] 添加类名给外面的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><svg></code>元素 (默认禁用)</li> <li>[ removeStyleElement ] 删除元素的<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;"><style></code> (默认禁用)</li> </ul> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"><strong>如何使用?</strong><br>首先是安装,连我都驾轻就熟了,如下:</p> <div class="highlight highlight-source-shell" style="color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ [sudo] npm install -g svgo</pre> </div> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">使用:</p> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;"> svgo [OPTIONS] [ARGS] Options: -h, --help : Help 帮助 -v, --version : Version版本 -i INPUT, --input=INPUT : 输入的文件, "-" 为标准输入 -s STRING, --string=STRING : 输入SVG数据字符串 -f FOLDER, --folder=FOLDER : 输入的文件夹,会优化与重写所有的*.svg文件 -o OUTPUT, --output=OUTPUT : 输入的文件或文件夹 (默认同输入), "-" 标准输出 -p PRECISION, --precision=PRECISION : 设置数字的小数部分,重写插件参数 --config=CONFIG : 配置文件扩展或替换默认设置 --disable=DISABLE : 根据名字禁用插件 --enable=ENABLE : 根据名字开启插件 --datauri=DATAURI : 输入文件以Data URI字符串形式(base64, URI encoded or unencoded) -q, --quiet : 仅输出错误信息,不包括正常状态消息 --pretty : 让SVG漂亮的打印 --show-plugins : 显示可用和存在的插件 Arguments: INPUT : 别名 --input OUTPUT : 别名 --output </pre> <ul style="margin-bottom:0px;padding-left:35px;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <li><p style="margin-top:16px;list-style-type:none;">单个文件使用举例:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo test.svg</pre><p style="margin-top:16px;list-style-type:none;">或者:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo test.svg test.min.svg</pre></li> <li><p style="margin-top:16px;list-style-type:none;">使用STDIN / STDOUT(标准输入输出):</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ cat test.svg | svgo -i - -o - > test.min.svg</pre></li> <li><p style="margin-top:16px;list-style-type:none;">文件夹举例:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -f ../path/to/folder/with/svg/files</pre><p style="margin-top:16px;list-style-type:none;">或者:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -f ../path/to/folder/with/svg/files -o ../path/to/folder/with/svg/output </pre></li> <li><p style="margin-top:16px;list-style-type:none;">使用字符串:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -s '<svg version="1.1">test</svg>' -o test.min.svg </pre><p style="margin-top:16px;list-style-type:none;">或者甚至是Data URI base64:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo -s 'data:image/svg+xml;base64,…' -o test.min.svg </pre></li> <li><p style="margin-top:16px;list-style-type:none;">SVGZ使用:</p><p style="margin-top:16px;list-style-type:none;">从<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">.svgz</code>到<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">.svg</code>:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ gunzip -c test.svgz | svgo -i - -o test.min.svg </pre><p style="margin-top:16px;list-style-type:none;">从.svg到.svgz:</p><pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;">$ svgo test.svg -o - | gzip -cfq9 > test.svgz </pre></li> <li><p style="margin-top:16px;list-style-type:none;">带操作界面的GUI – svgo-gui</p></li> <li>作为web app – SVGOMG</li> <li>作为Nodejs模块 – examples</li> <li>作为Grunt任务 – grunt-svgmin</li> <li>作为Gulp任务 – gulp-svgmin</li> <li>作为Mimosa模块 – mimosa-minify-svg</li> <li>作为OSX文件夹Action – svgo-osx-folder-action</li> <li>作为webpack loader – image-webpack-loader</li> </ul> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">这里出现了一个<code style="border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);padding:0px 4px;margin-left:2px;margin-right:2px;font-family:Consolas, monospace;">svgz</code>格式的文件,这是什么鬼呢?实际上是SVG的gzip压缩文件,Illustrator是可以直接导出的,如下示意:<br></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">根据我的测试,Chrome浏览器是可以直接打开的,FireFox浏览器不行(FireFox 44),直接下载,而IE11浏览器是个大白板,一看控制台,报错了:<br> </p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">虽然svgz的压缩比很厉害,是真正意义上的压缩,但是,实际上,应用价值并不大,因为类似JS, CSS字符集类型文本文件,可以通过服务器开启gzip实现传输,SVG也在其中,SO, …</p> <h3 style="font-size:1.5em;padding:0px;margin-top:18px;margin-bottom:0px;font-family:'Source Han Sans CN', 'PingFang SC', 'Myriad Pro', 'Hiragino Sans GB', SimHei;color:rgb(51,51,51);background-color:rgb(255,255,255);">三、svgo初体验</h3> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">看上去很厉害,我就先自己试用下,看看是不是用来解决自己的需求的。如下代码截图:</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">就是所有SVG精简到另外一个平级的名为output的文件夹,于是乎,得到:<br></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">从精简效率来看,很惊人,有50%~60%的精简率。</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">拿其中一个SVG代码(就是svgz示意的钩钩)前后对比下吧:</p> <div class="zxx_code" style="color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;"><?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px" height="200px" viewBox="0 0 200 200" enable-background="new 0 0 200 200" xml:space="preserve"> <path fill="#FFFFFF" d="M147.566,67.575c-3.979-3.24-4.355-3.337-8.9-5.64c-2.043-1.043-5.057,1.646-6.529,3.636L92,117.73 L65.85,83.972c-1.478-1.988-4.205-2.72-6.25-1.782c-4.658,2.408-4.19,2.327-8.168,5.467c-1.817,1.466-1.932,4.082-0.456,6.065 c0,0,28.183,36.5,31.592,40.896c5,6.274,14.09,5.965,18.864,0c3.521-4.498,46.59-61.078,46.59-61.078 C149.499,71.55,149.385,68.937,147.566,67.575z"/> </svg> </pre> </div> <div class="zxx_code" style="color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);"> <pre style="padding:10px;margin-top:8px;margin-bottom:8px;font-size:13px;background:rgba(0,0,0,.05);color:rgb(0,0,221);white-space:pre-wrap;font-family:'Lucida Console', Consolas, Monaco;"><svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"><path fill="#FFF" d="M147.566 67.575c-3.98-3.24-4.355-3.337-8.9-5.64-2.043-1.043-5.057 1.646-6.53 3.636L92 117.73 65.85 83.972c-1.478-1.988-4.205-2.72-6.25-1.782-4.658 2.408-4.19 2.327-8.168 5.467-1.817 1.466-1.932 4.082-.456 6.065 0 0 28.183 36.5 31.592 40.896 5 6.274 14.09 5.965 18.864 0 3.52-4.498 46.59-61.078 46.59-61.078 1.477-1.99 1.363-4.603-.456-5.965z"/></svg></pre> </div> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">恩,有种胖妞变靓妹的即视感:<br></p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">喔噢,很酷啊,正是自己想要的,而且貌似还可以通过设置让值保留2位小数,又可以进一步精简大小,不过现在这样已经足够了!</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">好的,不错,这就加入项目的豪华午餐阵营!</p> <p style="margin-top:16px;list-style-type:none;color:rgb(51,51,51);font-family:'system-ui';font-size:14px;background-color:rgb(255,255,255);">恭喜你,svgo, 你得到了评委的一致认可!<img src="http://img.e-com-net.com/image/info8/d0b94462e2e847a6991fc032a49d7568.gif" style="border:0px;" alt="" width="24" height="24"></p> <br> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1177019553213919232"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(svg)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835373236217540608.htm" title="360前端星计划-动画可以这么玩" target="_blank">360前端星计划-动画可以这么玩</a> <span class="text-muted">马小蜗</span> <div>动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能</div> </li> <li><a href="/article/1835326359614877696.htm" title="svg图片兼容性和用法优缺点" target="_blank">svg图片兼容性和用法优缺点</a> <span class="text-muted">独行侠_ef93</span> <div>svg图片的使用方法第一次来认认真真的研究了下svg图片,之前只是在网上见过,但都是一晃而过也没当回事,最近网站改版看到同事有用到svg格式的图片,想想自己干了几年的重构也没用过,这些细节的知识是应该好好研究研究了。暂时还没研究得完全透切,先记下目前为止所看到的吧不然又给忘了。svg可缩放矢量图形(ScalableVectorGraphics),顾名思义就是任意改变其大小也不会变形,是基于可扩展标</div> </li> <li><a href="/article/1835118231979913216.htm" title="HighCharts图表自动化简介" target="_blank">HighCharts图表自动化简介</a> <span class="text-muted">知识的宝藏</span> <a class="tag" taget="_blank" href="/search/Selenium%E9%AB%98%E7%BA%A7%E7%AF%87/1.htm">Selenium高级篇</a><a class="tag" taget="_blank" href="/search/Selenium%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">Selenium图表自动化测试</a><a class="tag" taget="_blank" href="/search/highcharts%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">highcharts图表自动化</a><a class="tag" taget="_blank" href="/search/Selenium%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">Selenium图表自动化</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%A1%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">图表自动化测试</a><a class="tag" taget="_blank" href="/search/highcharts/1.htm">highcharts</a><a class="tag" taget="_blank" href="/search/Selenium/1.htm">Selenium</a> <div>什么是分析数据?在任何应用程序中捕获并以图形或图表形式显示的分析数据是任何产品或系统的关键部分,因为它提供了对实时数据的洞察。验证此类分析数据非常重要,因为不准确的数据可能会在报告中产生问题,并可能影响应用程序/系统的其他相关领域。什么是HighChart?Highcharts是一个用纯JavaScript编写的j基于SVG成图技术的图表库,提供了一种简单的方法来向您的网站或Web应用程序添加交互</div> </li> <li><a href="/article/1834043725274247168.htm" title="vue3中动态引入本地图片的两种方法" target="_blank">vue3中动态引入本地图片的两种方法</a> <span class="text-muted">morenhaodan</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>方法一推荐简单好用方法二constgetImg=index=>{constmodules=import.meta.glob('@/assets/nncs2/**/*.{png,svg,jpg,jpeg}',{eager:true})consturl=`/src/assets/nncs2/jiantou${index+1}.png`//console.log(modules)if(modules[u</div> </li> <li><a href="/article/1833620613793673216.htm" title="2024年Python最全Python-Matplotlib可视化(1)——一文详解常见统计图的绘制(1)" target="_blank">2024年Python最全Python-Matplotlib可视化(1)——一文详解常见统计图的绘制(1)</a> <span class="text-muted">2401_84558452</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/matplotlib/1.htm">matplotlib</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>importmatplotlib.pyplotaspltx=range(50)y=[value*2forvalueinx]plt.plot(x,y)plt.show()上述代码将会绘制曲线y=2*x,其中x在[0,50]范围内,如下所示:可以看到窗口上方还包含多个图标,其中:|项目|Value||—|—|||此按钮用于将所绘制的图形另存为所需格式的图片,包括png,jpg,pdf,svg等常见格式</div> </li> <li><a href="/article/1833358767031414784.htm" title="CSS具有哪些特点呢?" target="_blank">CSS具有哪些特点呢?</a> <span class="text-muted">weixin_54503231</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>CSS是CascadingStyleSheets(层叠样式表)的缩写,它是一种用来描述HTML或XML(包括如SVG、MathML等衍生技术)文档样式的计算机语言。CSS的主要目的是为网页提供样式设计,包括颜色、字体、布局等,通过CSS,可以控制网页元素的外观和排版,使得网页更加美观和易于阅读。CSS的特点简单易学:CSS语言短小精悍,语法简单易学,使用起来很方便,可以快速地修改样式。内容与样式分</div> </li> <li><a href="/article/1833077083069313024.htm" title="「iOS学习」——Masonry学习" target="_blank">「iOS学习」——Masonry学习</a> <span class="text-muted">归辞...</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/cocoa/1.htm">cocoa</a> <div>iOS学习前言Masonry的属性Masonry的使用基础APIAutoBoxing修饰语倍数中心点设置边距优先级使用总结前言暑假我们学习了使用CocoaPods引入第三方库,实现使用SVG图片。而Masonry作为一个轻量级的布局架构,在使用中可以节省很多时间。故进行简单学习。Masonry的属性UI设计是iOS开发的必须一环,直接影响了app的观感和使用体验。我们通常使用frame框架直接确定</div> </li> <li><a href="/article/1832675190677532672.htm" title="使用fabric.js简简单单实现一个画板" target="_blank">使用fabric.js简简单单实现一个画板</a> <span class="text-muted">小草先森tyro</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>什么是fabricfabric是一个功能强大的JavaScript库,运行在HTML5canvas上。fabric为canvas提供了一个交互式对象模型,以及一个svg-to-canvas解析器。与canvas的区别来一个简单的例子来说明一下fabric与canvas的区别,假设我们想在一个画布上画一个红色的矩形://原生canvasapi//有一个id是c的canvas元素varcanvasEl</div> </li> <li><a href="/article/1832670899594162176.htm" title="探索 Fabric.js:前端开发的轻量级图形编辑框架" target="_blank">探索 Fabric.js:前端开发的轻量级图形编辑框架</a> <span class="text-muted">滑辰煦Marc</span> <div>探索Fabric.js:前端开发的轻量级图形编辑框架是一个强大的、基于WebGL和SVG的JavaScript图形库,专为构建交互式图形界面而设计。它提供了一种简单的方式来在网页上创建和操纵矢量对象,包括文本、形状、图像等,并且具有丰富的可定制性和性能优化。项目简介Fabric.js提供了一个统一的对象模型,使得处理HTML5canvas上的元素变得异常简单。无论是创建复杂的绘图应用,还是实现动态</div> </li> <li><a href="/article/1832373080777912320.htm" title="ionic3 自定义图标及应用" target="_blank">ionic3 自定义图标及应用</a> <span class="text-muted">咔簌</span> <div>生成图标准备好项目需要使用的图标,需为svg格式https://icomoon.io/app/进入iconmoon网址点击左上角汉堡包按钮,新建一个空的项目image.png点击项目右侧汉堡包添加自定义的图标,第一项可修改项目名image.png选中所有图标,选中generatefont,image.png修改完图标的名字后,下载image.png下载后的文件中我们需要用到的是font以及styl</div> </li> <li><a href="/article/1832156265334272000.htm" title="2. Fabric 简介" target="_blank">2. Fabric 简介</a> <span class="text-muted">Lanwarf-前端开发</span> <a class="tag" taget="_blank" href="/search/Fabric/1.htm">Fabric</a><a class="tag" taget="_blank" href="/search/fabric/1.htm">fabric</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>1.介绍Fabric.js—一个功能强大的Javascript库,使使用HTML5canvas的工作变得轻而易举。Fabric提供了画布缺少的对象模型,以及SVG解析器,交互性层和一整套其他必不可少的工具。这是一个完全开放源代码的项目,已获得麻省理工学院(MIT)的许可,多年来有许多贡献。在发现使用原生canvasAPI的烦恼之后,Fabric于2010年左右开始。最初的作者正在为printio.</div> </li> <li><a href="/article/1831722249049174016.htm" title="3个免费好用的网站,可以转换PDF,提取MP3" target="_blank">3个免费好用的网站,可以转换PDF,提取MP3</a> <span class="text-muted">精选软件库</span> <a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a> <div>今天分享的三个网站,分别用于文件转换PDF,QMC转MP3格式和配色网站。TOPDF这个网站是一个在线PDF转换工具,可以快速将文本文件、演示文稿、电子表格和图片转换为PDF格式。它支持多种文件格式,如AZW3、BMP、CHM、CSV、DjVu、DOC、DOCX、EPS、ePub、HEIC、JPG、MD、MOBI、ODT、OXPS、PNG、PPT、PPTX、PS、PUB、RTF、SVG、TIFF、</div> </li> <li><a href="/article/1831689210550120448.htm" title="鸿蒙 HarmonyOS学习日记 Day 2 界面开发、布局" target="_blank">鸿蒙 HarmonyOS学习日记 Day 2 界面开发、布局</a> <span class="text-muted">林钟雪</span> <a class="tag" taget="_blank" href="/search/Harmonyos/1.htm">Harmonyos</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a> <div>文章目录一、界面开发1、代码书写方式2、界面开发-布局思路3、组件的属性方法4、文字溢出省略号、行高5、Image图片组件6、输入框与按钮四、综合实战-华为登录五、svg图标六、布局元素的组成二、单位问题一、界面开发1、代码书写方式1、代码块在build()方法中书写,在右侧预览中查看效果2、界面开发-布局思路1、ArkUI(方舟开发框架)说明:是一套构建鸿蒙应用界面的框架构建页面的最小单位就是“</div> </li> <li><a href="/article/1830672967940534272.htm" title="React中实现antd自定义图标,鼠标悬浮变色" target="_blank">React中实现antd自定义图标,鼠标悬浮变色</a> <span class="text-muted">小鸟哗啦啦</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>借助antd的tooltip组件来实现hover时变色的效果1.新建组件自定义图标一般在iconfont上面获取,复制下来的svg代码,切记要删除fill属性后添加到组件中import{Tooltip}from"antd";importReactfrom"react";constHoverableSvg=()=>{return({/*...*/});};exportdefaultHoverable</div> </li> <li><a href="/article/1830010474004049920.htm" title="OmniGraffle Pro for mac(思维导图软件)v7.22.4正式版" target="_blank">OmniGraffle Pro for mac(思维导图软件)v7.22.4正式版</a> <span class="text-muted">不知名女娃</span> <a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a> <div>OmniGrafflePro是一款专业的图形设计工具,主要用于绘制流程图、组织结构图、网络图、原型设计等。它具有丰富的模板和符号库,用户可以根据需要自定义符号和模板,方便快捷地创建各种类型的图形设计。此外,OmniGrafflePro还支持多种导出格式,包括PDF、PNG、JPG、SVG等。它还可以与其他软件进行无缝集成,如Sketch、Photoshop、Illustrator等。总的来说,Om</div> </li> <li><a href="/article/1829521428609855488.htm" title="Flink(1.13) 的运行架构" target="_blank">Flink(1.13) 的运行架构</a> <span class="text-muted">万事万物</span> <div>架构图image.png官网原图:https://ci.apache.org/projects/flink/flink-docs-release-1.13/fig/processes.svgFlink运行时至少包含两个进程:1个JobManager和至少1个TaskManager。角色FlinkProgram(客户端)作用:负责将程序代码解析成数据流图(Dataflowgraph),并发送给Job</div> </li> <li><a href="/article/1829364426218762240.htm" title="safari中filter: drop-shadow()导致图片展示不出来" target="_blank">safari中filter: drop-shadow()导致图片展示不出来</a> <span class="text-muted">史努比的大头</span> <a class="tag" taget="_blank" href="/search/safari/1.htm">safari</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>有时候我们可能需要通过css来改变一个svg图片的颜色,比如让其跟随主题色改变.send-button{overflow:hidden;.send-button-img{filter:drop-shadow(@primary-24px0px0px);transform:translateX(24px);}}上面代码的原理是:drop-shadow(@primary-24px0px0px):这行代码</div> </li> <li><a href="/article/1828825756537548800.htm" title="TPAMI 2024 | TransVG++:基于语言条件视觉Transformer的端到端视觉定位" target="_blank">TPAMI 2024 | TransVG++:基于语言条件视觉Transformer的端到端视觉定位</a> <span class="text-muted">小白学视觉</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87%E8%A7%A3%E8%AF%BB/1.htm">论文解读</a><a class="tag" taget="_blank" href="/search/IEEE/1.htm">IEEE</a><a class="tag" taget="_blank" href="/search/TPAMI/1.htm">TPAMI</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/TAPMI/1.htm">TAPMI</a><a class="tag" taget="_blank" href="/search/%E9%A1%B6%E5%88%8A%E8%AE%BA%E6%96%87/1.htm">顶刊论文</a><a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87%E8%A7%A3%E8%AF%BB/1.htm">论文解读</a> <div>题目:TransVG++:End-to-EndVisualGroundingWithLanguageConditionedVisionTransformerTransVG++:基于语言条件视觉Transformer的端到端视觉定位作者:JiajunDeng,ZhengyuanYang,DaqingLiu,TianlangChen,WengangZhou,YanyongZhang,HouqiangL</div> </li> <li><a href="/article/1828406230440308736.htm" title="鸿蒙(API 12 Beta3版)【使用ImageSource完成图片解码】图片开发指导" target="_blank">鸿蒙(API 12 Beta3版)【使用ImageSource完成图片解码】图片开发指导</a> <span class="text-muted">移动开发技术栈</span> <a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BC%80%E5%8F%91/1.htm">鸿蒙开发</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/openharmony/1.htm">openharmony</a><a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93/1.htm">媒体</a><a class="tag" taget="_blank" href="/search/ArkTS/1.htm">ArkTS</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87/1.htm">图片</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E7%A0%81/1.htm">解码</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/1.htm">鸿蒙</a> <div>图片解码指将所支持格式的存档图片解码成统一的[PixelMap],以便在应用或系统中进行图片显示或[图片处理]。当前支持的存档图片格式包括JPEG、PNG、GIF、WebP、BMP、SVG、ICO、DNG。开发步骤全局导入Image模块。import{image}from'@kit.ImageKit';获取图片。方法一:获取沙箱路径。具体请参考[获取应用文件路径]应用沙箱的介绍及如何向应用沙箱推送</div> </li> <li><a href="/article/1827935641825013760.htm" title="33.鼠标悬停时的波浪线效果 & CSS 重置" target="_blank">33.鼠标悬停时的波浪线效果 & CSS 重置</a> <span class="text-muted">@大迁世界</span> <a class="tag" taget="_blank" href="/search/CSS/1.htm">CSS</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E5%B7%A7%E4%B8%8E%E6%A1%88%E4%BE%8B%E8%AF%A6%E8%A7%A3/1.htm">技巧与案例详解</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>鼠标悬停时的波浪线效果在鼠标悬停在链接上时创建波浪线效果。使用linear-gradient为链接创建重复背景。为链接创建一个:hover状态,其background-image为一个包含带有波浪路径和动画的SVG的dataURL。The<aclass="squiggle"href="#"</div> </li> <li><a href="/article/1827750612415115264.htm" title="HarmonyOS鸿蒙转场动画概览" target="_blank">HarmonyOS鸿蒙转场动画概览</a> <span class="text-muted">PlumCarefree</span> <a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a> <div>使用原因:提升用户体验,更加流畅丝滑动效设计场景1.特征动效2.转场动效点击滑动翻动夹捏拖拽3.微动效细微动画4.特征动效插画动效动画能力选型系统动画属性动画显示动画转场动画路径动画粒子动画第三方动画资源加载类GIF动画帧动画第三方库LottieSVG动画开发实现视角转换步骤了解系统能力,包括相关的API分析UX设计视角设计动画方案使用动画能力调试和优化例如使用属性动画:.animation例如加</div> </li> <li><a href="/article/1827747084221116416.htm" title="鸿蒙(API 12 Beta3版)【使用Image完成图片解码】图片开发指导依赖JS对象" target="_blank">鸿蒙(API 12 Beta3版)【使用Image完成图片解码】图片开发指导依赖JS对象</a> <span class="text-muted">移动开发技术栈</span> <a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BC%80%E5%8F%91/1.htm">鸿蒙开发</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/openharmony/1.htm">openharmony</a><a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93/1.htm">媒体</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/1.htm">鸿蒙</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87/1.htm">图片</a><a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96/1.htm">依赖</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E7%A0%81/1.htm">解码</a> <div>图片解码指将所支持格式的存档图片解码成统一的[PixelMap],以便在应用或系统中进行图片显示或[图片处理]。当前支持的存档图片格式包括JPEG、PNG、GIF、WebP、BMP、SVG、ICO、DNG。开发步骤添加依赖在进行应用开发之前,开发者需要打开native工程的src/main/cpp/CMakeLists.txt,在target_link_libraries依赖中添加libace_n</div> </li> <li><a href="/article/1827410413537554432.htm" title="【Python】使用Python对pdf,svg,png等进行转换" target="_blank">【Python】使用Python对pdf,svg,png等进行转换</a> <span class="text-muted">Technicalflight</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Technicalflight转换工具使用Python对pdf,svg,png等进行转换代码开源在Github:https://github.com/Technicalflight/Python-Transformation感谢你们的小星星!!!!上手指南将Python文件下载后,先将requirements.txt文件中的依赖进行下载开发前的配置要求Python3安装步骤在Window平台上安装</div> </li> <li><a href="/article/1827323327660781568.htm" title="vue3使用elementui-plus时使用深度选择器穿透影响原样式" target="_blank">vue3使用elementui-plus时使用深度选择器穿透影响原样式</a> <span class="text-muted">lytcreate.</span> <a class="tag" taget="_blank" href="/search/VUE3/1.htm">VUE3</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/elementui/1.htm">elementui</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>一、原样式:下拉框选择时,右边存在一个下拉的箭头符号,那么在许多场景下我们不需要显示,这个时候就可以通过开发者工具进行定位,选中该元素,可以看到,影响的样式是:.el-iconsvg二、深度穿透修改原样式我们修改原样式,增加display:none即可不显示该符号,此时有两种方案,一种是取消style里面的scoped属性,这样会影响全局样式,导致所有的下拉框都没有这个符号了,这并不是我想要的,所</div> </li> <li><a href="/article/1827229635365138432.htm" title="Office 2019新增功能" target="_blank">Office 2019新增功能</a> <span class="text-muted">iLester</span> <div>SVG支持image.png插入应用了筛选器的可缩放矢量图形(SVG),为文档、工作表和演示文稿增添视觉趣味。内置翻译程序image.png使用MicrosoftTranslator将单词、短语和其他所选文字翻译成另一种语言。快速访问附件image.png曾经查找以附件形式发送给你的某个文件是否十分辛苦?不必再担心了!现在只需单击“文件”>“打开”>“与我共享的内容”即可。支持Latex公式ima</div> </li> <li><a href="/article/1826653117010243584.htm" title="CSS 8种让人眼前一亮的hover效果眼前一亮的HOVER效果" target="_blank">CSS 8种让人眼前一亮的hover效果眼前一亮的HOVER效果</a> <span class="text-muted">小湾生产队队长</span> <a class="tag" taget="_blank" href="/search/CSS%E6%A0%B7%E5%BC%8F/1.htm">CSS样式</a> <div>目录CSS8种让人眼前一亮的hover效果眼前一亮的HOVER效果一、发送效果二、霓虹效果三、边框效果四、圆形渐进效果五、圆角效果六、冰冻效果七、闪亮效果八、加载效果CSS8种让人眼前一亮的hover效果眼前一亮的HOVER效果一、发送效果效果HTML//这里是一个svg的占位SendCSS#send-btn{display:flex;align-items:center;justify-cont</div> </li> <li><a href="/article/1768496779365515264.htm" title="3 HTML5 svg" target="_blank">3 HTML5 svg</a> <span class="text-muted">官清岁月</span> <div>SVG:ScalableVectorGraphics;//可缩放矢量图形->svg图像放大情况下图形质量不会损失(失真);-->应用场景:图表、动画、矢量图(点/线/面,形成的基本图形)、常用于制作图标icon1、canvas与svg的区别:(1).canvas是由像素点构成的,其依赖分辨率,其放大后会"失真";其通过js来绘制2D图形,常用来制作游戏、图表(运行速度快);(2).svg是由图形(</div> </li> <li><a href="/article/1760678759125536768.htm" title="【实战】二、Jest难点进阶(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(六)" target="_blank">【实战】二、Jest难点进阶(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(六)</a> <span class="text-muted">程序边界</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/tdd/1.htm">tdd</a> <div>文章目录一、Jest前端自动化测试框架基础入门二、Jest难点进阶2.mock深入学习学习内容来源:Jest入门到TDD/BDD双实战_前端要学的测试课相对原教程,我在学习开始时(2023.08)采用的是当前最新版本:项版本@babel/core^7.16.0@pmmmwh/react-refresh-webpack-plugin^0.5.3@svgr/webpack^5.5.0@testing-</div> </li> <li><a href="/article/1759963584726659072.htm" title="Boxy SVG for Mac(矢量图编辑器)" target="_blank">Boxy SVG for Mac(矢量图编辑器)</a> <span class="text-muted">青色精灵</span> <div>BoxySVGforMac是一款非常好用的向量绘图工具,适用于初学者以及专业网页设计师和Web开发人员。boxysvg拥有超过100个命令的可配置键盘快捷键,能够让你快速制作出各种各样的矢量图。拥有BoxySVGforMac,让编辑矢量图不再困难!今天给大家分享的是BoxySVGforMac已经激活成功的版本,直接拖拽安装即可使用!BoxySVGforMac功能介绍1、干净,直观的UI深受Inks</div> </li> <li><a href="/article/1759905594954838016.htm" title="Vue3+vite搭建基础架构(9)--- 使用vite-plugin-svg-icons" target="_blank">Vue3+vite搭建基础架构(9)--- 使用vite-plugin-svg-icons</a> <span class="text-muted">谁不想飞舞青春</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>Vue3+vite搭建基础架构(9)---使用vite-plugin-svg-icons说明安装vite-plugin-svg-icons使用vite-plugin-svg-icons添加svg-icon组件和全局组件js文件测试svg雪碧图说明这里记录下自己在Vue3+vite的项目使用vite-plugin-svg-icons来全局使用svg雪碧图,不使用ts语法,方便以后直接使用。这里承接自</div> </li> <li><a href="/article/67.htm" title="jvm调优总结(从基本概念 到 深度优化)" target="_blank">jvm调优总结(从基本概念 到 深度优化)</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a> <div>JVM参数详解:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html   Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 </div> </li> <li><a href="/article/194.htm" title="【Scala十六】Scala核心十:柯里化函数" target="_blank">【Scala十六】Scala核心十:柯里化函数</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>本篇文章重点说明什么是函数柯里化,这个语法现象的背后动机是什么,有什么样的应用场景,以及与部分应用函数(Partial Applied Function)之间的联系   1. 什么是柯里化函数 A way to write functions with multiple parameter lists. For instance def f(x: Int)(y: Int) is a </div> </li> <li><a href="/article/321.htm" title="HashMap" target="_blank">HashMap</a> <span class="text-muted">dalan_123</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>HashMap在java中对很多人来说都是熟的;基于hash表的map接口的非同步实现。允许使用null和null键;同时不能保证元素的顺序;也就是从来都不保证其中的元素的顺序恒久不变。 1、数据结构     在java中,最基本的数据结构无外乎:数组 和 引用(指针),所有的数据结构都可以用这两个来构造,HashMap也不例外,归根到底HashMap就是一个链表散列的数据</div> </li> <li><a href="/article/448.htm" title="Java Swing如何实时刷新JTextArea,以显示刚才加append的内容" target="_blank">Java Swing如何实时刷新JTextArea,以显示刚才加append的内容</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9B%B4%E6%96%B0/1.htm">更新</a><a class="tag" taget="_blank" href="/search/swing/1.htm">swing</a><a class="tag" taget="_blank" href="/search/JTextArea/1.htm">JTextArea</a> <div>在代码中执行完textArea.append("message")后,如果你想让这个更新立刻显示在界面上而不是等swing的主线程返回后刷新,我们一般会在该语句后调用textArea.invalidate()和textArea.repaint()。 问题是这个方法并不能有任何效果,textArea的内容没有任何变化,这或许是swing的一个bug,有一个笨拙的办法可以实现</div> </li> <li><a href="/article/575.htm" title="servlet或struts的Action处理ajax请求" target="_blank">servlet或struts的Action处理ajax请求</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>其实处理ajax的请求非常简单,直接看代码就行了: //如果用的是struts //HttpServletResponse response = ServletActionContext.getResponse(); // 设置输出为文字流 response.setContentType("text/plain"); // 设置字符集 res</div> </li> <li><a href="/article/702.htm" title="FineReport的公式编辑框的语法简介" target="_blank">FineReport的公式编辑框的语法简介</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E5%85%AC%E5%BC%8F/1.htm">公式</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>FINEREPORT用到公式的地方非常多,单元格(以=开头的便被解析为公式),条件显示,数据字典,报表填报属性值定义,图表标题,轴定义,页眉页脚,甚至单元格的其他属性中的鼠标悬浮提示内容都可以写公式。 简单的说下自己感觉的公式要注意的几个地方:   1.if语句语法刚接触感觉比较奇怪,if(条件式子,值1,值2),if可以嵌套,if(条件式子1,值1,if(条件式子2,值2,值3)</div> </li> <li><a href="/article/829.htm" title="linux mysql 数据库乱码的解决办法" target="_blank">linux mysql 数据库乱码的解决办法</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B9%B1%E7%A0%81/1.htm">数据库乱码</a> <div>linux 上mysql数据库区分大小写的配置 lower_case_table_names=1 1-不区分大小写 0-区分大小写   修改/etc/my.cnf 具体的修改内容如下:   [client] default-character-set=utf8   [mysqld] datadir=/var/lib/mysql socket=/va</div> </li> <li><a href="/article/956.htm" title="我的spring学习笔记6-ApplicationContext实例化的参数兼容思想" target="_blank">我的spring学习笔记6-ApplicationContext实例化的参数兼容思想</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a> <div>ApplicationContext能读取多个Bean定义文件,方法是: ApplicationContext appContext = new ClassPathXmlApplicationContext( new String[]{“bean-config1.xml”,“bean-config2.xml”,“bean-config3.xml”,“bean-config4.xml</div> </li> <li><a href="/article/1083.htm" title="mysql 基准测试之sysbench" target="_blank">mysql 基准测试之sysbench</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95/1.htm">基准测试</a><a class="tag" taget="_blank" href="/search/mysql%E5%9F%BA%E5%87%86%E6%B5%8B%E8%AF%95/1.htm">mysql基准测试</a><a class="tag" taget="_blank" href="/search/MySQL%E6%B5%8B%E8%AF%95/1.htm">MySQL测试</a><a class="tag" taget="_blank" href="/search/sysbench/1.htm">sysbench</a> <div>1 执行如下命令,安装sysbench-0.5: tar xzvf sysbench-0.5.tar.gz  cd sysbench-0.5  chmod +x autogen.sh  ./autogen.sh  ./configure --with-mysql --with-mysql-includes=/usr/local/mysql</div> </li> <li><a href="/article/1210.htm" title="sql的复杂查询使用案列与技巧" target="_blank">sql的复杂查询使用案列与技巧</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E9%A1%B5/1.htm">数据分页</a><a class="tag" taget="_blank" href="/search/%E5%90%88%E5%B9%B6%E6%9F%A5%E8%AF%A2/1.htm">合并查询</a> <div>  本片博客使用的数据库表是oracle中的scott用户表;          -------------------  自然连接查询           查询 smith 的上司(两种方法) &</div> </li> <li><a href="/article/1337.htm" title="深入学习Thread类" target="_blank">深入学习Thread类</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a> <div>一.             线程的名字 下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。 同时,Thr</div> </li> <li><a href="/article/1464.htm" title="JSON串转换成Map以及如何转换到对应的数据类型" target="_blank">JSON串转换成Map以及如何转换到对应的数据类型</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a><a class="tag" taget="_blank" href="/search/net.sf.json/1.htm">net.sf.json</a> <div>        在实际开发中,难免会碰到JSON串转换成Map的情况,下面来看看这方面的实例。另外,由于fastjson只支持JDK1.5及以上版本,因此在JDK1.4的项目中可以采用net.sf.json来处理。 一.fastjson实例 JsonUtil.java package com.study; impor</div> </li> <li><a href="/article/1591.htm" title="【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架" target="_blank">【RPC框架HttpInvoker一】HttpInvoker:Spring自带RPC框架</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>HttpInvoker是Spring原生的RPC调用框架,HttpInvoker同Burlap和Hessian一样,提供了一致的服务Exporter以及客户端的服务代理工厂Bean,这篇文章主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成   在 【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中</div> </li> <li><a href="/article/1718.htm" title="【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析" target="_blank">【Mahout二】基于Mahout CBayes算法的20newsgroup的脚本分析</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a> <div>#!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information re</div> </li> <li><a href="/article/1845.htm" title="nginx三种获取用户真实ip的方法" target="_blank">nginx三种获取用户真实ip的方法</a> <span class="text-muted">ronin47</span> <div>随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到<apache获取用户真实IP地址>,如果是后端真实服务器是nginx,那么继续往下看。 实例环境: 用户IP 120.22.11.11 </div> </li> <li><a href="/article/1972.htm" title="java-判断二叉树是不是平衡" target="_blank">java-判断二叉树是不是平衡</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>参考了 http://zhedahht.blog.163.com/blog/static/25411174201142733927831/ 但是用java来实现有一个问题。 由于Java无法像C那样“传递参数的地址,函数返回时能得到参数的值”,唯有新建一个辅助类:AuxClass import ljn.help.*; public class BalancedBTree { </div> </li> <li><a href="/article/2099.htm" title="BeanUtils.copyProperties VS PropertyUtils.copyProperties" target="_blank">BeanUtils.copyProperties VS PropertyUtils.copyProperties</a> <span class="text-muted">诸葛不亮</span> <a class="tag" taget="_blank" href="/search/PropertyUtils/1.htm">PropertyUtils</a><a class="tag" taget="_blank" href="/search/BeanUtils/1.htm">BeanUtils</a> <div> BeanUtils.copyProperties VS  PropertyUtils.copyProperties  作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业</div> </li> <li><a href="/article/2226.htm" title="[金融与信息安全]最简单的数据结构最安全" target="_blank">[金融与信息安全]最简单的数据结构最安全</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>       现在最流行的数据库的数据存储文件都具有复杂的文件头格式,用操作系统的记事本软件是无法正常浏览的,这样的情况会有什么问题呢?        从信息安全的角度来看,如果我们数据库系统仅仅把这种格式的数据文件做异地备份,如果相同版本的所有数据库管理系统都同时被攻击,那么</div> </li> <li><a href="/article/2353.htm" title="vi区段删除" target="_blank">vi区段删除</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/vi/1.htm">vi</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E6%AE%B5%E5%88%A0%E9%99%A4/1.htm">区段删除</a> <div>区段删除是编辑和分析一些冗长的配置文件或日志文件时比较常用的操作。简记下vi区段删除要点备忘。   vi概述    引文中并未将末行模式单独列为一种模式。单不单列并不重要,能区分命令模式与末行模式即可。   vi区段删除步骤: 1. 在末行模式下使用:set nu显示行号 非必须,随光标移动vi右下角也会显示行号,能够正确找到并记录删除开始行</div> </li> <li><a href="/article/2480.htm" title="清除tomcat缓存的方法总结" target="_blank">清除tomcat缓存的方法总结</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>用tomcat容器,大家可能会发现这样的问题,修改jsp文件后,但用IE打开 依然是以前的Jsp的页面。 出现这种现象的原因主要是tomcat缓存的原因。 解决办法如下: 在jsp文件头加上 <meta http-equiv="Expires" content="0"> <meta http-equiv="kiben&qu</div> </li> <li><a href="/article/2607.htm" title="不要盲目的在项目中使用LESS CSS" target="_blank">不要盲目的在项目中使用LESS CSS</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/less/1.htm">less</a> <div> 如果你还不知道LESS CSS是什么东西,可以看一下这篇文章,是我一朋友写给新人看的《CSS——LESS》   不可否认,LESS CSS是个强大的工具,它弥补了css没有变量、无法运算等一些“先天缺陷”,但它似乎给我一种错觉,就是为了功能而实现功能。   比如它的引用功能 ? .rounded_corners{     </div> </li> <li><a href="/article/2734.htm" title="[入门]更上一层楼" target="_blank">[入门]更上一层楼</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>更上一层楼 通篇阅读完整个“入门”部分,你就完成了一个完整 Yii 应用的创建。在此过程中你学到了如何实现一些常用功能,例如通过 HTML 表单从用户那获取数据,从数据库中获取数据并以分页形式显示。你还学到了如何通过 Gii 去自动生成代码。使用 Gii 生成代码把 Web 开发中多数繁杂的过程转化为仅仅填写几个表单就行。 本章将介绍一些有助于更好使用 Yii 的资源: </div> </li> <li><a href="/article/2861.htm" title="Apache HttpClient使用详解" target="_blank">Apache HttpClient使用详解</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a><a class="tag" taget="_blank" href="/search/http%E5%8D%8F%E8%AE%AE/1.htm">http协议</a> <div>Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会</div> </li> <li><a href="/article/2988.htm" title="zxing二维码扫描功能" target="_blank">zxing二维码扫描功能</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/zxing/1.htm">zxing</a> <div>经常要用到二维码扫描功能 现给出示例代码 import com.google.zxing.WriterException; import com.zxing.activity.CaptureActivity; import com.zxing.encoding.EncodingHandler; import android.app.Activity; import an</div> </li> <li><a href="/article/3115.htm" title="纯HTML+CSS带说明的黄色导航菜单" target="_blank">纯HTML+CSS带说明的黄色导航菜单</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a> <div>HoverTree带说明的CSS菜单:纯HTML+CSS结构链接带说明的黄色导航   在线体验效果:http://hovertree.com/texiao/css/1.htm代码如下,保存到HTML文件可以看到效果:   <!DOCTYPE html > <html > <head> <title>HoverTree</div> </li> <li><a href="/article/3242.htm" title="fastjson初始化对性能的影响" target="_blank">fastjson初始化对性能的影响</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97%E5%8C%96/1.htm">序列化</a> <div>之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营。对比了jackson,gson等框架之后,决定用fastjson,为什么呢,因为看名字感觉很快。。。   网上的说法:   fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。 </div> </li> <li><a href="/article/3369.htm" title="基于Mybatis封装的增删改查实现通用自动化sql" target="_blank">基于Mybatis封装的增删改查实现通用自动化sql</a> <span class="text-muted">mengqingyu</span> <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a> <div>1.基于map或javaBean的增删改查可实现不写dao接口和实现类以及xml,有效的提高开发速度。 2.支持自定义注解包括主键生成、列重复验证、列名、表名等 3.支持批量插入、批量更新、批量删除 <bean id="dynamicSqlSessionTemplate" class="com.mqy.mybatis.support.Dynamic</div> </li> <li><a href="/article/3496.htm" title="js控制input输入框的方法封装(数字,中文,字母,浮点数等)" target="_blank">js控制input输入框的方法封装(数字,中文,字母,浮点数等)</a> <span class="text-muted">qifeifei</span> <a class="tag" taget="_blank" href="/search/javascript+js/1.htm">javascript js</a> <div>在项目开发的时候,经常有一些输入框,控制输入的格式,而不是等输入好了再去检查格式,格式错了就报错,体验不好。 /** 数字,中文,字母,浮点数(+/-/.) 类型输入限制,只要在input标签上加上 jInput="number,chinese,alphabet,floating" 备注:floating属性只能单独用*/     funct</div> </li> <li><a href="/article/3623.htm" title="java 计时器应用" target="_blank">java 计时器应用</a> <span class="text-muted">tangqi609567707</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a> <div>mport java.util.TimerTask;   import java.util.Calendar;   public class MyTask extends TimerTask {        private static final int </div> </li> <li><a href="/article/3750.htm" title="erlang输出调用栈信息" target="_blank">erlang输出调用栈信息</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>在erlang otp的开发中,如果调用第三方的应用,会有有些错误会不打印栈信息,因为有可能第三方应用会catch然后输出自己的错误信息,所以对排查bug有很大的阻碍,这样就要求我们自己打印调用的栈信息。用这个函数:erlang:process_display (self (), backtrace).需要注意这个函数只会输出到标准错误输出。 也可以用这个函数:erlang:get_s</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>