搜索
首页web前端js教程JavaScript框架(xmlplus)组件的介绍(一)图标(ICON)

xmlplus 是一个JavaScript框架,用于快速开发前后端项目。这篇文章主要介绍了JavaScript框架(xmlplus)组件的介绍(一)图标(ICON),具有一定的参考价值,感兴趣的小伙伴们可以参考一下

网页上使用的图标分可为三种:文件图标、字体图标和 SVG 图标。对于文件图标,下面仅以 PNG 格式来说明。

PNG 图标

对于 PNG 图标的引用,有两种方式。一种是直接由 HTML 元素 img 的 src 属性给出。下面是一个简单的示例。

Icon: {
    css: "#icon { width: 68px; height: 68px; }",
    xml: "<img id=&#39;icon&#39;/>",
    fun: function (sys, items, opts) {
        this.attr("src", this + ".png");
    }}

这里假定图标文件与组件所在文件在同级目录中,于是可以按如下的方式便捷地引用所需的图标。注意组件 Icon 巧妙地使 id 属性值与图片文件名关联,这样可以避免创建额外的属性。

Example: {
    css: "#example > * { padding: 10px; background: #F9F9F9; }",
    xml: "<p id=&#39;example&#39; class=&#39;bs-example&#39;>\            <Icon id=&#39;msg&#39;/>\            <Icon id=&#39;home&#39;/>\            <Icon id=&#39;contact&#39;/>\          </p>"}

另一种引用 PNG 图标的方式是给相应的对象添加 <a href="http://www.php.cn/wiki/895.html" target="_blank">background-image</a> 样式,并且由样式中给出图标所在路径。下面是一个简单的示例。

Icon: {
    css: "#icon { width: 68px; height: 68px; }",
    xml: "<p id=&#39;icon&#39;/>",
    fun: function (sys, items, opts) {
        this.css("background-image", this + ".png");
    }}

这种形式与前面由 img 标签给出的图标有许多相似之处。不同的是,前者动态指定的是 img 标签的 src 值 ,而后者动态指定的则是 p 元素的 css 样式。该组件与前面给出的 Icon 组件的使用方式完全一致,这里就不重复了。

对于以上给出的组件 Icon,使用的是离散的图标文件。实际应用中,通常给出的是一个包含许多图标的 PNG 文件。这种情况下该如何构建图标组件呢?请看下面给出的一种较为实用的方案。

Icon: {
    css: "#msg { background-position:  0 0; }\          #home { background-position: -48px 0; }\          #contact { background-position: -96px 0; }\          #icon { width: 68px; height: 68px; background-image: url(icons.png); }",
    xml: "<p id=&#39;icon&#39;/>",
    fun: function (sys, items, opts) {
        sys.icon.addClass("#" + this);
    }}

此组件在样式项 css 中直接给出了图标文件所在路径,以及各种图标在文件内的位置。并且图标实例 id 与相应图标类名对应。当然,组件的使用方式与前面给出的组件是一致的。

下面给出的是另一种组件设计方案,它把位置信息移到了函数项中。此方案是可行的,但组件的执行效率不如前者。该组件每次实例化都要生成位置信息一次,而对于前者,由于样式项在组件实例化时,仅生成一次,所以保证了组件的执行性能。

Icon: {
    css: "#icon { width: 48px; height: 48px; background-image: url(icons.png); }",
    xml: "<p id=&#39;icon&#39;/>",
    fun: function (sys, items, opts) {
        var positions = {
            "msg": "0 0",
            "home": "-48px 0",
            "contact": "-96px 0"
        }
        sys.icon.css("background-position", positions[this]);
    }}

字体图标

字体图标通过引入包含图标的字体文件,将图标像文字一样使用。它与 PNG 图标相比,最关键一点在于它的矢量性。字体图标的引用方式有两种:通过类名的引用方式以及直接引用 unicode 的方式。

通过类名引用

这种类型的图标内容定义在样式项中,HTML 元素通过类名进行关联。

Msg: {
    css: "#msg { font-size: 48px; width: 68px; height: 68px; line-height: 48px; }\          #msg:before { content: &#39;\\e608&#39;; }",
    xml: "<p id=&#39;msg&#39;/>"}

直接引用 unicode

这种引用方式与前一种在本质上没什么不同,它只是将图标内容由样式项转移到视图项中而已。

Home: {
    css: "#home { font-size: 48px; width: 68px; height: 68px; line-height: 48px; }",
    xml: "<p id=&#39;home&#39;>&#xe609;<p/>"}

下面给出的示例展示了两种不同的引用字体图标的方式。注意,此示例简化了样式项中与兼容性相关的内容,详情请查阅配套源码。

Example: {
    css: "@font-face { font-family: &#39;iconfont&#39;; url(&#39;iconfont.ttf&#39;) format(&#39;truetype&#39;);}\          #msg, #home { font-family: &#39;iconfont&#39;; font-style:normal; }\          #example > * { display: inline-block; padding: 10px; background: #F9F9F9; }",
    xml: "<p id=&#39;example&#39;>\            <Msg id=&#39;msg&#39;/>\            <Home id=&#39;home&#39;/>\          </p>"}

SVG 图标

最后来看看我们的重头戏,如何封装以及使用 SVG 图标。在 xmlplus 中,SVG 图标是推荐的图标使用形式,它允许直接嵌入代码,无需额外引用相关文件。

对于这种方式,首先你需要一个 svg 图标集,其包含的内容大概是下面这样子。

<svg>
    <symbol id="icon" width=&#39;48px&#39; height=&#39;48px&#39; viewBox=&#39;0 0 24 24&#39;>
        <g><polygon points=&#39;9,16.2 4.8,12 3.4,13.4 9,19 21,7 19.6,5.6&#39;/></g>\    </symbol>
    <!-- 还可以有更多的symbol --></svg>

svg 图标集有两种存在方式,一个是以文件形式存在,这时 xlink:href 属性值需要明确指明文件的 url,下面是一个示例。

<svg>
   <use xlink:href=&#39;example.com/file.svg#icon&#39;/>\</svg>

另一种形式是,图标集直接存在于页内,这种方式叫做页内引用,它无需指明 url,只要指定相应 symbol 的 id 就好了。

<svg>
   <use xlink:href=&#39;#icon&#39;/>\</svg>

对 svg 图标的直接封装

相对于通过 xlink:href 引用图标,使用 xmlplus 的组件化技术直接封装会是一种更好的方式。请看下面的一个 SVG 图标组件。

Icon: {
    xml: "<svg width=&#39;48px&#39; height=&#39;48px&#39; viewBox=&#39;0 0 24 24&#39;>\            <g><polygon points=&#39;9,16.2 4.8,12 3.4,13.4 9,19 21,7 19.6,5.6&#39;/></g>\          </svg>",
    fun: function (sys, items, opts) {
        this.attr("fill", &#39;&#39; + this);
    }}

这是一个钩形图标,组件中仅包含视图项以及函数项成份。根据函数项的内容可以知道,图标颜色由组件实例的 id 属性值给出。下面来看看如何使用该图标。

Example: {
    css: "#example > * { padding: 10px; background: #F9F9F9; }\          #example > *:hover { fill: #fff; background: #563d7c; }",
    xml: "<p id=&#39;example&#39;>\            <Icon id=&#39;red&#39;/>\            <Icon id=&#39;green&#39;/>\            <Icon id=&#39;blue&#39;/>\          </p>",
    fun: function (sys, items, opts) {
        sys.example.on("click", "*", e => console.log(this + " clicked"));
    }}

此示例展示了三个不同颜色的图标,并且侦听了图标的点击事件,打开浏览器控制台,当点击不同图标时,可以看到相应的输出。

另外,有一种常见的 SVG 图标的封装方式,它把 SVG 文本经过 URL 编码后直接在 img 的 src 属性或者样式 background-image 中给出。就像下面这样子。

Icon: {
    css: "#icon {width: 16px; height: 16px; background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D...")},
    xml: "<p id=&#39;icon&#39;/>"}

这种方式与上一种方式比起来,有两个缺点:其一,你看不出 SVG 的源文件。其二,你失去了对 SVG 图标的操作权。当然,这种方式也并非不能用。如果你不需要对图标进行后续的操作,使用这种方式也是可以接受的。另外,与之相似的一种图标使用方式是对图标 base64 编码后的内嵌引用。下面是一个简单的示范:

Icon: {
    xml: "<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIcAAA..." />"}

这种方式与上一种 SVG 图标的封装方式是类似的。不过相对于 SVG 图标组件的直接封装,你同样失去了对图标的操作权。

以上是JavaScript框架(xmlplus)组件的介绍(一)图标(ICON)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
超越浏览器:现实世界中的JavaScript超越浏览器:现实世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

使用Next.js(后端集成)构建多租户SaaS应用程序使用Next.js(后端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

如何使用Next.js(前端集成)构建多租户SaaS应用程序如何使用Next.js(前端集成)构建多租户SaaS应用程序Apr 11, 2025 am 08:22 AM

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript:探索网络语言的多功能性JavaScript:探索网络语言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的演变:当前的趋势和未来前景JavaScript的演变:当前的趋势和未来前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

神秘的JavaScript:它的作用以及为什么重要神秘的JavaScript:它的作用以及为什么重要Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python还是JavaScript更好?Python还是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安装JavaScript?如何安装JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。