前端又又出新框架,这次没有打包了

最近,前端开发领域又迎来了一个新框架——ofa.js。它的独特之处在于,不依赖于现有的 nodes/npm/webpack 前端开发工作流程。与jQuery类似,只需引用一个脚本,您就能像使用React/Vue/Angular一样轻松地开发大型应用。

punch-logo.png

极易上手

如果您要开发简单的项目,想要用一个漂亮的按钮组件,例如 Ant Design 中的 Button组件,你需要学习Node.js、NPM和React等知识,才能开始使用该按钮组件。对于非前端开发者或初学者来说,这将是一个漫长的过程。

如果使用基于ofa.js 开发的组件,就不需要这么复杂了;你只需要了解HTML的基础知识(即使不看ofa.js的文档),也可以轻松使用基于ofa.js开发的组件。以下是使用官方的 punch-logo 代码示例:

<!-- 引入ofa.js到您的项目 -->
<script src="https://cdn.jsdelivr.net/gh/kirakiray/ofa.js/dist/ofa.min.js"></script><!-- 加载预先开发的punch-logo组件 -->
<l-m src="https://ofajs.github.io/ofa-v4-docs/docs/publics/comps/punch-logo.html"></l-m><!-- 使用punch-logo组件 -->
<punch-logo style="margin: 50px 0 0 100px"><imgsrc="https://ofajs.github.io/ofa-v4-docs/docs/publics/logo.svg"logoheight="90"/><h2>不加班了</h2><p slot="fly">下班给我</p><p slot="fly">迟点下班</p><p slot="fly">周末加班</p>
</punch-logo>

punch-demo.gif

你可以最直接拷贝上面的代码,放到一个空白的html文件内运行试试;这使得ofa.js非常容易与传统的Web开发技术栈相融合。

一步封装组件

封装组件同样非常简单,只需一个HTML文件即可实现。以下是一个官方封装的开关(switch)组件示例:

<!-- my-switch.html -->
<template component><style>.switch {position: relative;display: inline-block;width: 60px;height: 34px;background-color: #ccc;transition: background-color 0.4s;border-radius: 34px;cursor: pointer;}.slider {position: absolute;height: 26px;width: 26px;left: 4px;bottom: 4px;background-color: white;transition: transform 0.4s;border-radius: 50%;}.switch.checked {background-color: #2196f3;}.switch.checked .slider {transform: translateX(26px);}</style><div class="switch" class:checked="checked" on:click="checked = !checked"><span class="slider"></span></div><script>export default {tag: "my-switch",data: {checked: true,},};</script>
</template>

在使用时,只需使用 l-m 组件引用它:

<script src="https://cdn.jsdelivr.net/gh/kirakiray/ofa.js/dist/ofa.min.js"></script>
<l-m src="./my-switch.html"></l-m>
<my-switch></my-switch>

switch.gif

示例可以在官方网站下方查看。由于无需打包流程,只需将文件上传到静态服务器即可发布,还可以进行跨域引用,这极大降低了组件共享的成本。

多种模板语法糖

ofa.js与Vue和Angular一样提供了许多模板语法糖,主要包括:

  • 文本渲染
  • 属性绑定/双向绑定
  • 事件绑定
  • 条件渲染
  • 列表渲染

具体案例可在官网向下滚动至“提供多样便捷的模板语法”处查看。

天生的状态同步高手

与其他框架不同,ofa.js 使用无感状态同步。这意味着数据不需要通过函数操作,只需设置数据对象即可实现状态同步。以下是一个共享黑夜模式的按钮示例:

// is-dark.js
const isDark = $.stanz({value: false,
});export default isDark;
<!-- my-button.html -->
<template component><style>:host {display: block;}.container {display: inline-block;padding: 0.5em 1em;color: white;border-radius: 6px;background-color: blue;cursor: pointer;user-select: none;}.container.dark {background-color: red;}</style><div class="container" class:dark="isDark.value"><slot></slot></div><script>import isDark from "./is-dark.js";export default {data: {isDark: {},},attached() {// 共享dark对象数据this.isDark = isDark;},detached() {// 清除内存记录this.isDark = {};},};</script>
</template>

sync-state.gif

您可以跳转到 状态同步案例 以查看效果。

最简单的表单操作

表单只需调用formData方法,就能生成自动同步数据的对象:

<form id="myForm"><input type="text" name="username" value="John Doe" /><div>sex:<label>man<input type="radio" name="sex" value="man" /></label><label>woman<input type radio="radio" name="sex" value="woman" /></label></div><textarea name="message">Hello World!</textarea>
</form>
<br />
<div id="logger"></div>
<script>const data = $("#myForm").formData();$("#logger").text = data;data.watch(() => {$("#logger").text = data;});
</script>

form1.gif

您还可以轻松地反向设置表单数据:

<form id="myForm"><input type="text" name="username" value="John Doe" /><div>sex:<label>man<input type="radio" name="sex" value="man" /></label><label>woman<input type="radio" name="sex" value="woman" /></label></div><textarea name="message">Hello World!</textarea>
</form>
<br />
<div id="logger"></div>
<script>const data = $("#myForm").formData();setTimeout(() => {// 反向设置数据data.username = "Yao";data.sex = "man";data.message = "ofa.js is good!";}, 1000);
</script>

form2.gif

制作自定义表单组件也没有其他框架那么复杂,只需为组件定义valuename属性即可。

具体效果可跳转至formData API查看。

开发应用

您还可以使用ofa.js开发Web应用,然后直接引用已开发的应用到您的网页上:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>应用演示</title><script src="https://cdn.jsdelivr.net/gh/kirakiray/ofa.js/dist/ofa.min.js"></script></head><body><o-app src="https://xxxxx.com/app-config.mjs"> </o-app></body>
</html>

具体效果可跳转至使用o-app组件查看。

SCSR

官方提供了一种类似服务端渲染的解决方案,它不仅保证了用户体验,还使页面在静态状态下可被搜索引擎爬取。官网采用了SCSR的方案。

SCSR的全称是Static Client-Side Rendering,又称为静态客户端渲染。它是CSR(Client-Side Rendering)的一种变种,在保留了CSR用户体验的基础上,还能够让页面在静态状态下被搜索引擎爬取。

您可以点击SCSR方案以查看详细信息。

代码简洁

当前版本4.3.29的 ofa.min.js 文件仅有52KB,经过gzip压缩后仅有18KB。

其他

最近升级到了v4版本,目前可用的第三方库还比较有限,但以后将逐渐增加。作者正在准备开发基于ofa.js的UI库。

作者是一位中国开发者,快去给 ofa.js 加星吧!

最后

欢迎关注"所谓前端"微信公众号,大家一起交流
点击扫码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2776883.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW伺服阀性能参数测试

LabVIEW伺服阀性能参数测试 伺服阀作为电液伺服系统中的核心元件&#xff0c;其性能参数的准确测试对保证系统整体性能至关重要。开发了一种基于LabVIEW软件开发的伺服阀性能参数测试系统&#xff0c;提高测试的自动化程度和精确性&#xff0c;同时降低操作复杂度和成本。 传…

java学习(多态)

一、多态 含义&#xff1a;方法或对象具有多种形态。是面向对象的第三大特征&#xff0c;多态是建立在封装和继承基础上的。 多态的具体体现&#xff1a; 1&#xff09;方法的多态 &#xff08;例如重写和重载&#xff09; 2&#xff09;对象的多态 多态注意事项&#xff1…

【小白开服日记】幻兽帕鲁服务器如何搭建?

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

2023最新飞机即时通讯系统源码,支持PC、Android、IOS和WEB四端

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 2023最新的飞机即时通讯系统源码已经经过测试,并在PC、Android、IOS和WEB四个平台上运行良好。 当初开始使用时,我们…

arkTS开发鸿蒙OS应用(登录页面实现,连接数据库)

前言 喜欢的朋友可在抖音、小红书、微信公众号、哔哩哔哩搜索“淼学派对”。知乎搜索“编程淼”。 前端架构 Toubu.ets import router from ohos.router Component export struct Header{build(){// 标题部分Row({space:5}){Image($r(app.media.fanhui)).width(20).onClic…

堆排序----C语言数据结构

目录 引言 堆排序的实现**堆的向下调整算法** 对排序的时间复杂度建堆的时间复杂度&#xff1a;排序过程的时间复杂度&#xff1a;总体时间复杂度&#xff1a; 引言 堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;利用堆的数据结构来实现。它的…

时间序列分类算法 极简设计之ROCKET、MiniRocket详解及python实战

前言 时间序列分类任务也是比较常见的任务&#xff0c;根据分类&#xff0c;来判断时间序列的性质&#xff0c;类别等。 其中rocket算法十分另类&#xff0c;看似用的非常简单且暴力的方式&#xff0c;却拿到了不错的效果&#xff0c;以及拥有非常快的推理和训练速度。 后续还有…

Java并发基础:ArrayBlockingQueue全面解析!

内容摘要 ArrayBlockingQueue类是一个高效、线程安全的队列实现&#xff0c;它基于数组&#xff0c;提供了快速的元素访问&#xff0c;并支持多线程间的同步操作&#xff0c;作为有界队列&#xff0c;它能有效防止内存溢出&#xff0c;并通过阻塞机制平衡生产者和消费者的速度…

[职场] 公安管理学就业方向及前景 #媒体#笔记#笔记

公安管理学就业方向及前景 公安管理学是中国普通高等学校本科专业。本专业文理兼收&#xff0c;学制4年&#xff0c;授予法学学士学位。本专业培养掌握马克思主义基本原理&#xff0c;政治坚定&#xff0c;坚持党和国家的路线、方针、政策&#xff0c;具有良好职业素养、科学素…

K210如何下载程序

一、打开资料包里提供的K-Flash程序烧录软件 二、选择串口 三、选择波特率 四、选择In-Chip&#xff0c;烧录到Flash芯片里面&#xff0c;重新上电还会运行程序 五、如果选择In - Memory&#xff0c;这次可以运行&#xff0c;但下次重新上电就不会保持这次的程序了。 六、选择固…

macOS Sonoma 14.3.1(23D60)发布

系统介绍 黑果魏叔2 月 9 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.3.1 更新&#xff08;内部版本号&#xff1a;23D60&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 魏叔 查询苹果官方更新日志&#xff0c;macOS Sonoma 14.3.1 修复内容和 …

LeetCode-第28题-找出字符串中第一个匹配项的下标

1.题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 2.样例描述 3.思路描述 可以让字符串 …

【JAVA WEB】盒模型

目录 边框 内边距 基础写法 复合写法 外边距 基础写法 复合写法 块级元素的水平居中 弹性布局 设置行内元素的属性 &#xff0c;span 每一个HTML元素就相当于是一个矩形的“盒子” 这个盒子由以下这几个部分构成&#xff1a; 1.边框 border 2.内容 content 3.内边…

写后台接口,前后台数据对接(vue+springboot)

一、怎么写接口&#xff1f;&#xff1f;&#xff1f; 1.Entity&#xff08;定义一堆属性之类的&#xff09; altins>getter和setter方法 2.Controller 3.Service&#xff08;查询出数据&#xff09; 调用了一个方法 4.Mapper 5.回到service&#xff08;返回数据&#x…

2019 年全国职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书(笔记详解)

1. 网络拓扑图 2. IP 地址规划表 3. 设备初始化信息 阶段一 任务 1:网络平台搭建 1、根据网络拓扑图所示,按照 IP 地址参数表,对 DCFW 的名称、各接口IP 地址进行配置。 2、根据网络拓扑图所示,按照 IP 地址参数表,对 DCRS 的名称进行配置,创建 VLAN 并将相应接口划入 …

ChatGPT高效提问—prompt常见用法(续篇七)

ChatGPT高效提问—prompt常见用法&#xff08;续篇七&#xff09; 1.1 零样本、单样本和多样本 ​ ChatGPT拥有令人惊叹的功能和能力&#xff0c;允许用户自由向其提问&#xff0c;无须提供任何具体的示例样本&#xff0c;就可以获得精准的回答。这种特性被称为零样本&#x…

【教3妹学编程-算法题】LCP 30. 魔塔游戏

3妹&#xff1a;2哥&#xff0c;干嘛呢&#xff0c;一个人闷闷不乐的&#xff0c;在看什么呢。 2哥 : 这不快过年了嘛&#xff0c; 想回家过年给我的小侄子买个礼物&#xff0c;结果他张口说想要个ps5. 那玩意我都没有&#xff0c;他还想要。我看看网上有什么好的礼物适合他的。…

vscode开发FPGA(0)--windows平台搭建

一、从官网下载安装VScode Download Visual Studio Code - Mac, Linux, Windows 二、安装配置插件 1. 安装Chinese&#xff08;simplified&#xff09;中文汉化包 2.安装Verilog-HDL/systemVerilog插件(支持verilog语法) 3.配置CTags Support插件(支持代码跳转) 1)在github下…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Slider组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Slider组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Slider组件 滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调…

AcWing 1224 交换瓶子(简单图论)

[题目概述] 有 N 个瓶子&#xff0c;编号 1∼N&#xff0c;放在架子上。 比如有 5 个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#xff0c;显然&a…