(凯思奥)开发记录2:官网架构以及进度规划,参数查询,GUI抽离player组件,素材链接切换,***双站点联调记录: 自制路由守卫,哈希与数据渲染,***SB3播放器嵌入+样式修改+作品链入+视频

本文主要是介绍(凯思奥)开发记录2:官网架构以及进度规划,参数查询,GUI抽离player组件,素材链接切换,***双站点联调记录: 自制路由守卫,哈希与数据渲染,***SB3播放器嵌入+样式修改+作品链入+视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、初期采取仿慧编程首页

1、决定采取react hooks属性 ,将react升级成 16.12最新版本。 需要重新link scratch-vm
2、决定不采用框架,使用sass进行样式编写。安装node-sass和 sass-loader
3、编辑界面先,左上角logo修改,并链入官网路由。
4、开仿!

需要升级的框架:
react react-dom react-test-renderer
开源库选择:

2019年12月16日15:51:52
经分析GUI和考虑到用户体验感,
需要使用webpack进行多页面生成。
index.html是官网,
editor.html是编辑器。

然后 index.ejs中注入 扩展的配置config
在这里插入图片描述
再gui中添加垃圾桶。
在这里插入图片描述
经过几小时的研究,终于完成多页面的webpack配置。
但是其中需要注释optimization。如果不注释,则home页面打包的js文件会丢失react和react-dom

1、参数查询

本地调式sb3接口:3001

2、GUI抽离player组件

在ReactDOM.render中,
此WappredGui是高阶组件。
其内部是GUI container 状态逻辑层
再内部是 GUI component 样式逻辑层

在这里插入图片描述

3、素材链接切换

在这里插入图片描述
注意:
之前修改了默认角色,而默认角色需要添加svg*2到2处。
一处在lib/default-project/中
另一处在/static/assets/中

角色素材库更新(来自群友)
// tag-messages.js里面增加geekstar: {defaultMessage: 'Geekstar',description: 'Tag for filtering a library for geekstar',id: 'gui.libraryTags.geekstar'},
geekstar就是新增的按钮;// backdrops.json{"name":"123","rawURL":"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1574859531235&di=2c4c333fda2ddce66dcd88d08a34f149&imgtype=0&src=http%3A%2F%2Fpic27.nipic.com%2F20130313%2F9252150_092049419327_2.jpg","type":"backdrop","tags":["outdoors","cold","north pole","south pole","ice","antarctica","robert hunter","geekstar"],"info":[960,720,2]}// backdrop-tags.js{tag: 'geekstar', intlLabel: messages.geekstar}

4、Home与GUI联调相关记录

1、单站点Home开发 使用webpack.config2.js
2、双站点Home与GUI调试,还是使用webpack.config.js

注意1:
双站点开发 需注意路由和链接的区别。
站点之间的跳转是 链接的跳转。 是服务端做的事
而站点内的跳转是 路由的跳转。 是前端一种锚点功能。

2020年1月13日,前端大体完成,进入后端开发部分。

开发思路:

1、顺着前端开发的静态页面,从上到下实现各个逻辑各个接口,体现复用性

并不断优化前端,优化后端。

2、先思考,后参考,再实现,再分析。
3、BrowserRouter的更换

1、BrowserRouter为了美化URL以及书签的可收藏,进行了地址栏hash的增加,并且每个组件拥有UseEffect副作用,用于跳转指定选项卡(适配书签)。 // DigitalTabs考虑复杂度就不做了,制作一级路由适配书签。
2、但是有个问题,react-router-dom 提供的 history.listen没有解除绑定的API,故只能暂时通过window去标志。
3、找到了解决办法,官方不是没提供解绑,而是封装成了二阶函数,即将listen实例化执行即可。
在这里插入图片描述
管理react路由的history对象的插件history的使用介绍

一、自制路由守卫

4、完整实现代码如下:

  const [location, setLocation] = useState(props.location);const prevLocation = usePrev(location);// ...// 充当路由守卫useEffect(() => {// 挂载完毕后的触发顺序: listener return useEffect回调文// 3、触发内部逻辑,滚动条跳转// console.log(location, prevLocation);if (location.pathname !== prevLocation.pathname) {window.scrollTo(0, 0);}const unListen = props.history.listen(location => {// 1、触发hashchange,设置location,//  而prevLocation会因为重新执行闭包,自动记录先前的locationsetLocation(location);});// 2、触发unListen解绑listener,return () => unListen();}, [location]);

二、哈希与数据渲染

在这里插入图片描述
仅改变页面的哈希,是不会触发重渲的。
非常适合于拥有选项卡的页面,多级选项卡,配合多个哈希,进行多样数据渲染。
方式有两种:
1、哈希与逻辑强关联

  // 所有选项卡的点击,均是路由跳转,路由改变会触发useEffect,useEffect中进行数据的重渲。// 页面首载:路由定位选项卡useEffect(() => {// 一级路由哈希判断,定位次级路由的渲染内容const { type } = transferHash(props.location.hash);if (type === 'work') {setNavActiveIndex(0);} else if (type === 'collect') {setNavActiveIndex(1);} else if (type === 'concern') {setNavActiveIndex(2);}}); // props的location改变会触发// 作品 收藏 关注const handleNavClick = (index) => {// 哈希跳转props.history.push(`/user#type=${index === 0 ? 'work' : index === 1 ? 'collect' : 'concern'}`)};

2、哈希与逻辑解耦

  // 页面首载:路由定位选项卡useEffect(() => {// ... 相似}, []); // 只需要触发一次const handleTabClick = (index) => {setTabActiveIndex(index);};const handleTagClick = (index) => {setTagActiveIndex(index);};const handleDigitalClick = (index) => {setDigitalActiveIndex(index);window.location.hash = `#sha`; // 修改哈希// .. refreshWorks() };

三、SB3播放器嵌入+样式修改+作品链入

1、嵌入基本无问题,但静态资源的地址,需要使用根目录定位,output publicPath: '/'即可
2、注意historyApiFallback: true
3、devServer 资源代理默认 publicPath: ‘/’ 无问题。
4、修改SB3播放器样式

1、进入编辑按钮和隐藏过渡动画
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、播放器尺寸调整
在这里插入图片描述
2.1圆角消除
在这里插入图片描述
在这里插入图片描述
3、stage-only.css盒子宽高采用继承
在这里插入图片描述
4、播放器全屏样式优化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、过渡动画小屏幕化
在这里插入图片描述

注:上述样式并非最终样式,主要参考文件的位置。

2020年1月16日14:21:25 杂七杂八原因,样式又进行了修改,从自己的组件开始传入isPlayerOnly并传递给Stage继续向下传递。
在这里插入图片描述

作品链入部分

其实scratch自身提供了外部链入作品的方法,而且直接暴露给了浏览器的URL 如
/#10001 则访问是服务器的10001文件,但是我想抽离出API.
辗转1小时,我失败了。
所以,还是魔改源码。
在这里插入图片描述
注: 理论上sb3_时间戳.sb3 应该不会重名,我不清楚。但是并不想大改,更新数据库的字段。
且使用handleHashChange,并不灵活,如果真发生问题,需要注入loadProject并注入封面,后议。
过了15分钟。
我真实日了狗了,问题很严峻,如果url采用文件名的方式去获取文件,很好,文件来了,那么数据库的字段信息呢,标识是什么? ???
OKOK,
只能采用loadProject方式了,希望坑别太多。

2020年1月17日13:31:32
SB3Player组件 封装完毕。
实现过程和思路基本一致:
loadProject加载完作品后, projectData进入了redux,通过注入vm单例,调用vm.renderer.draw()方法 进行canvas的解析。

2020年2月6日19:39:06
因为站点需要对SB3Player组件的尺寸做设置。故需要开设新prop传递。
在此梳理下文件之间的关系:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链入视频

其实视频用的就是原生的播放器,没什么花头。

    <div className='video-contaniner'><videosrc={resource} // resource为视频地址controls="controls"/></div>

这篇关于(凯思奥)开发记录2:官网架构以及进度规划,参数查询,GUI抽离player组件,素材链接切换,***双站点联调记录: 自制路由守卫,哈希与数据渲染,***SB3播放器嵌入+样式修改+作品链入+视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385498

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件