一个快速开发响应式网站的有趣的偏视觉交互的前端开发工具箱-套件-Uix-Kit

这个产品维护已经有一年了(由于业务需求不同,产品本身是针对国外网站和WordPress的需求搭配),自己本身是做UI出生,开发只是业余爱好,仅仅作为平时工作的需要。杂七杂八会一些前后端开发。并非职业码农! 我是一个BBoy,也是一个爱到处旅行拍极限视频的冒险家!喜欢大自然,不喜欢繁华都市。 好啦,自我介绍简单就好!:) Uix Kit —— 它是一个偏视觉交互的工具集合,它基于常用的脚本库,帮助开发者快速完成一套完整的交互型网站。 项目地址: https://github.com/xizon/uix-kit 它不是一个框架,不是一个脚本库,它是一个兼容Bootstrap的快速建站HTML5套件,遵循W3C标准,包括手风琴、Tab切换、大型导航、单页、视差、分页、项目符号列表、文章列表、网格系统、AJAX交互、常用的多风格轮播、视频、计数器、作品画廊展示、模态弹窗、简易灯箱、无限滚动加载、鼠标交互、滚动侦听动画、时间轴、按钮、多风格Footer、文字效果、徽章、表单等等常用的网站模块,并支持官方无限更新和扩展、优化,满足各类常用的、交互和动效级的Web前端开发需求。支持Gulp和Webpack开发模式。套件提供了规范的HTML结构和模块化的HTML,CSS,JS代码(默认),能够让开发者快速进入开发模式,自定义、修改或删除任意模块。 设计初衷:现在很多普通网站,已经可以通过在线的拖拽建站工具,智能建站系统快速完成,因此普通网站已经无需专门花很多金钱和时间去找一个开发者完成。Uix Kit工具箱是针对一些特殊效果的交互的网站,也可以用于比较个性化的定制网站的开发设计。 套件结构:uix-kit/├── README.md├── CHANGELOG.md├── CONTRIBUTING.md├── LICENSE├── webpack.config.js├── package-lock.json├── package.json├── dist/│ ├── css/│ │ ├── uix-kit.css│ │ ├── uix-kit.css.map│ │ ├── uix-kit.min.css│ │ ├── uix-kit.min.css.map│ │ ├── uix-kit-rtl.css│ │ ├── uix-kit-rtl.css.map│ │ ├── uix-kit-rtl.min.css│ │ └── uix-kit-rtl.min.css.map│ └── js/│ │ ├── uix-kit.js│ │ ├── uix-kit.js.map│ │ ├── uix-kit.min.js│ │ ├── uix-kit.min.js.map│ │ ├── uix-kit-rtl.js│ │ ├── uix-kit-rtl.js.map│ │ ├── uix-kit-rtl.min.js│ │ └── uix-kit-rtl.min.js.map├── misc/│ ├── screenshots/│ └── grid/├── src/│ ├── index.js│ ├── index-rtl.js│ ├── components/│ │ ├── ES5/ => Third-party plugins adopt pure file merger and do not import and export│ │ └── ES6/ => Core modules├── examples/│ ├── *.html│ ├── assets/│ │ ├── css/│ │ ├── fonts/│ │ ├── images/│ │ ├── videos/│ │ ├── models/│ │ ├── json/│ │ └── js/└──演示https://xizon.github.io/uix-kit/examples/ ...

June 24, 2019 · 1 min · jiezi

网页html生成图片的常用方案

如果您有一个需求是将网页生成一个快照的图片,然后需要用到该图片上传或者发送给他人的这样的需求,那么你会怎么做呢?聪明的你可能会想到canvas是否可以生成一个这样的图片呢?没错,今天就给大家推荐一个简单又好用的工具html2canvas。准备文件进入该官方网站点击此处,在官网首页开始下载资源文件,html2canvas.js或者html2canvas.min.js皆可。将该资源文件引入您需要使用该功能的页面中。开始使用给您想转换成图片的盒子标签上添加一个唯一id,这样便于找到该DOM节点。按照官方文档相关参数设置并添加代码在合适的地方来进行图片转换。html2canvas(document.querySelector("#app")).then(canvas => { document.body.appendChild(canvas)});详细使用相关参数设置可参考该官方文档,根据需要设置即可。兼容性介绍Firefox 3.5+Google ChromeOpera 12+IE9+EdgeSafari 6+关于vue-cli中使用最新版本应该可以直接通过yarn或者npm引入了,可参照官网首页介绍npm install –save html2canvas或者yarn add html2canvas如果有相关问题,还可参考另一篇文章点此查看

March 16, 2019 · 1 min · jiezi

php,vue,vue-ssr 做出来的页面有什么区别?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由shirishiyue发表于云+社区专栏目前我这边的web页面,都是采用php+smarty模板生成的,是一种比较早期的开发模式。好处是没有现阶段常用的前后端分离出现的首屏问题,因为其本身就是服务器渲染,坏处是代码分离不好做,公用化及组件化不好做。这里涉及前后端分离相关问题,老生常谈,这里暂不讨论。 近期,在做一些前端分离的尝试。采用国内非常流行的的vue框架,选这个框架而不是react的原因主要是vue的mvvm保留html书写惯性,对于html里写代码多的人来说更容易入手。而且流行框架vue也经过了极大量的测试验证,参考资料充实详尽,可靠性和易用性都满足条件,没有理由不尝试一下。 总的来说,做了一个如下小应用demo,长下面这样,三个简单页面,分页查看所有王者英雄,或者所有装备。分别采用 php+smarty,vue-cli,vue+ssr,三种方式进行开发,完了再对结果做一下对比。 三个版本的体验入口如下(尽量用手机浏览器扫描,微信对ip域名有特殊处理), 三个版本并没有严格做相同环境处理,所以下面的对比分析仅作为直观上的对比了解,并不适用于详细性能上的严格对比额。 对三个页面分别进行webpage test,测试结果如下,▲ 详细结果 php版:https://www.webpagetest.org/r… vue ssr 服务器渲染版:https://www.webpagetest.org/r… vue-cli 静态版:https://www.webpagetest.org/r…▲ 综合参数1、页面加载时间。理所当然是纯静态的vue-cli最快。vue ssr 和 php 版差不多(忽略上面的php版,因为php版有一些额外资源要加载)。2、首字节时间。静态的最快。若扣除dns时间,其实php和vue-ssr版差不多。(注:php版和vue ssr版不是部署在同一台机器上,php版机器性能要强一些,多核,vue-ssr版机器比较弱单cpu单核)3、渲染时间和页面呈现熟读指数,vue ssr版比php版本稍微慢一点。这是因为,php的html到页面后直接就呈现了,而vue ssr到client后,有一个vue框架的渲染过程。▲ 加载瀑布流 从加载流的角度上看一下三者的区别,php版本vue ssr 服务器渲染版本vue-cli静态版本 从瀑布流上可以看出很多三种页面执行方式的区别,列举一部分如下:1、php 版以及 vue-ssr 版 有较长的服务器处理时间,,,对应的首字节时间明显高于没有服务器处理的vue-cli静态页面。2、由于服务器版本的php或者vue-ssr的首屏数据都已经生成了,所以页面不会再次请求接口,少了数据的请求过程。而vue-cli版有一个较长的数据请求过程。3、vue-cli静态页面的dom content time 或者 document complete time 明显最短,原因是模板html几乎没什么内容。4、webpack打包拆离出来的独立js或者css文件,其实在同一域名下,由于浏览器同一域名可以并行6个tcp,以及http的keep-alive性质,其实总的下载时间不多。对比看,跟阻塞的dns时间差不多。5、三种页面 Start Renderer Time 分别是 1.2s,1.3s,2.0s。 vue-cli静态页面生成的白屏时间中,大部分是首屏数据请求消耗的时间,,同时也可以对比出,服务器渲染的对首屏时间的确有很明显的效果。▲ 直观体验 时间,,平均速度指数Speed Index,分别是1.2,,,1.3,,,2.0s,,,可以观察下面的对比视频体验。 >点此观看动态视频<相关阅读【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

November 15, 2018 · 1 min · jiezi

读了这篇文章,你将变身web分析大师

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由shirishiyue发表于云+社区专栏1、工具介绍 这是一个非常详细且专业的web页面性能分析工具,而且开源的!如果你打不开其官网,或者担心安全问题,你可以自己拿源码搭建这个平台工具。 性能分析极其详细,包含你所知道的所有新能参数指标,还有一些这个工具自己的指标参数,比如speed index,更能从人的角度看待一个页面体验是否良好。提供了多种主流浏览器的访问性能,提供了全球多个地点的测试性能,还有视频录像功能可以返回体验。这个视频功能极好的用于直观的对比演示。总之,优点非常之多,没有理由不尝试一下。 入口在 这里,长这样, 上面三输入框,,,第一行,输入你的页面url。 第二行,选择你的访问点,比如你想测一下北京的用户访问速度,那么你选择北京。 第三行,选择什么浏览器访问。 右边,点击START TEST,,,,耐心等待。 分析的结果时存下来的,比如,我的三个url分析结果如下,可以反复进入查阅。页面1:https://test.igame.qq.com/pvp…,分析结果。页面2:http://134.175.16.24/vuessr/a…,分析结果。页面3:http://134.175.16.24/newcss/a…,分析结果。2、结果使用和分析 分析完后,结果长这样, 总共跑了三次。每一次都是First View(就是相当于新用户,首次打开页面,没有任何缓存)。 Performance Result 就是指标总览,列举了一些主要的新能指标的平均值。指标解析: 从输入url按enter开始的,达到下面节点的时间。▲ Load Time 页面完全加载完时间(不等待图片下载,iframe下载,css更新完),此时,window.onload 事件此时触发。同 Document complete time.▲ DOM Content Loaded HTML DOM 骨架完全下载和解析,包括<script>元素。(等待图像下载,css更新,iframe更新等)。此时,DOMContentLoaded 事件触发。(你在预加载数据的时候,可以在这个事件时会更合适些,而不是上面的dom ready)▲ Time to First Byte 首字节时间。浏览器接收到第一个字节的时间。包括服务器处理以及网络传输,DNS寻址时间+建立连接时间(Socket) + SSL认证时间等。▲ Start Render 白屏后首次出现内容的时间。▲ Speed Index 速度指数,页面呈现出来的平均时间。比Start Render更人性化的指标。详细计算方式参考:Speed Index 。主要▲ Time to Interactive 首次可交互时间。页面可以开始响应用户输入事件。(因为页面呈现过程中,其实还是不可交互的。)▲ Requests 浏览器针对页面上的内容(图片,javascript,css等)发出的请求数。▲ Bytes In 浏览器加载页面下载的数据量。它通常也被称为“页面大小”。过程详细:▲ 中间的Waterfall可以看到瀑布流图,点进去,跟你使用chrome tool一样。不多介绍。▲ Screen Shot,网页快照,保存了从输入url到页面fully loaded的全称快照。▲ Video 整个过程的视频。这个非常好,你可以和几个视频放在一起,非常直观的看哪一个快哪一个慢。▲ 各种 breakdown 拆分统计,包括 Contents,Processing,Domains等等,,,,,比如,Contents 拆分统计如下,▲ domains breakdown,and, request map,,,可统计请求域名情况,域名越多,明显对时间要求更多。▲ 性能表现总量,可以优化性能的指标完成情况。 这里面列出了可使用的性能点,如:First Byte Time (back-end processing): 51/100Use persistent connections (keep alive): 100/100Use gzip compression for transferring compressable responses: 42/100Compress Images: 100/100Leverage browser caching of static assets: 14/100Use a CDN for all static assets: 0/100相关阅读【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识 ...

November 14, 2018 · 1 min · jiezi

如何替代即将淘汰的Flash方案?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由MarsBoy发表于云+社区专栏| 导语 Web技术飞速发展的如今,我们在感受新技术带来的便捷和喜悦的同时,也时常在考虑着一个问题:老技术如何迁移。正如本文的主题一样,Flash技术在早年风靡在Web领域,曾经发挥着无尽力量的一个工具正逐渐失去了其重要性。由于性能,兼容性,版权问题,Flash的市场正在消退,曾经靠Flash实现的功能和特性如何完美得进行迁移呢,本文将简单谈一谈Flash的几个常见的特性的替代方案。1.视频播放(Play Video)我们知道Flash可以播放.swf文件的动画视频,而且具有很强的控制功能,以前很多Web视频播放器都是基于Flash去实现的。包括embed标签,都是如此。所有视频源为swf的文件的视频都需要借助Flash去播放。解决方案:在移动端设备上,使用HTML5的video标签基本没有问题。 在PC上,IE低版本(IE8-)浏览器上除了Flash目前没有其它办法 在PC上,IE9+和其它现在浏览器,采用HTML5标签。 综合来说,可以统一用以下一段代码实现兼容:<video width=“400” height=“300” controld> <!– mp4格式适用于IE9+,Chrome,Safari –> <source src=“test.mp4” type=“video/mp4”></source> <!– ogg格式适用于FireFox,Opera,Chrome –> <source src=“test.ogg” type=“video/ogg”></source> <!– webm格式适用于FireFox,Opera,Chrome –> <source src=“test.webm” type=“video/webm”></source> <!– object需要Flash支持,当IE8-时考虑 –> <object data=“test.mp4” width=“400” height=“300”> <!– embed需要Flash支持,当IE8-时考虑 –> <embed src=“test.swf” width=“400” height=“300”> </object></video>2.跨域请求(Corss Origin Request)2.1使用Flash进行跨域请求的方案实现目前在PC端a.qq.com的页面请求b.qq.com的一个接口是理论上跨域的一个请求,旧版本浏览器特别是只支持XMLHTTPRequest Level1的浏览器,需要访问跨域请求,要么使用jsonp,要么只能使用Flash。 使用Flash进行跨域需要做的事情是1.a.qq.com的js与Flash交互 2.Flash校验安全性,检查b.qq.com下根目录的crossDomain.xml文件的控制访问属性 3.Flash作为中间代理请求b.qq.com 4.Flash将请求结果返回给a.qq.com的js 图1简明扼要的描述了这个过程。图1 Flash跨域请求2.2 去Flash跨域如何实现情况一:CORS(Cross-Origin Resource Sharing)【后端需改造】条件:要使用CORS,必须在支持XmlHttpRequest Level2的浏览器中(IE10+和其它现代浏览器) 做法:设置withCredentials头,然后结合后台设置的Access-Control-Allow-Origin头进行控制,进行跨域即可。相关代码如下: 前端JS:$.ajax({ url:“http://b.qq.com/api/xxx.php", type:“POST”, xhrFields:{ withCredentials:true }, success:function(){ //… }, fail:function(){ //… }})后端PHP:<?php//b.qq.com的接口中添加Access-Control-Allow-Origin头header(“Access-Control-Allow-Origin:http://a.qq.com”);情况二:中转代理请求【建议】我们回到同源策略,如果要请求b.qq.com下的一个接口,我们从b.qq.com下的页面发起请求,是遵循同源策略的。那么我们可以在接口域名下放一个统一的html文件,用于代理我们请求b.qq.com的接口,然后将结果告诉a.qq.com就可以了。 这种情况下要解决2个主要问题: 1.cookie如何发送 2.a.qq.com与b.qq.com的代理页面前端通信 其实两个问题是一个问题,a.qq.com下的cookie我们是可以获取到的,同样的cookie我们可以种在b.qq.com下的。问题归结到第二个问题,如何在前端实现a.qq.com和b.qq.com两个页面之间的通信。 有两个方法:1.使用HTML5规范的PostMessage特性主要核心逻辑代码可以参考: 【a.qq.com页面代码】<!DOCTYPE html><html><head> <meta charset=“utf-8”></head><body> <script> //a.qq.com中逻辑: var $proxyFrame=$("<iframe style=‘display:none’ src=‘http://b.qq.com/proxy.html'></iframe>").appendTo(document.body); //等待iframe中转页面load完毕 $proxyFrame.on(“load”,function(){ //调中转页面 $proxyFrame.get(0).contentWindow.postMessage({ api:"/xx/y”, data:{ a:1, b:2 }, cookie:document.cookie//带过去的cookie }); //回调 $(window).on(“message”,function(e){ var event=e.originalEvent; if(event.origin==“http://b.qq.com”){ console.log(“response data:",event.data); } }) }) </script></body></html>【b.qq.com页面代码】<!DOCTYPE html><html><head> <meta charset=“utf-8”></head><body> <script> //b.qq.com中逻辑: $(window).on(“message”,function(e){ var event=e.originalEvent; if(event.origin==“http://a.qq.com”){ var api=event.data.api; var data=event.data.data; var cookie=event.data.cookie; //种植cookie //………种植cookie的操作 //代理请求接口 $.ajax({ url:api, data:data, //……. success:function(result){ //将response返回给a.qq.com window.parent.postMessage(result,”") }, fail:function(){ } }) } }) </script></body></html>以上demo简单解决了前端跨域通信,跨域带cookie等问题,在逻辑上完全可以实现跨域通信。但是对于不支持PostMessage特性的老版浏览器是行不通的。比如IE8-浏览器就不能很好的支持PostMessage特性。这种情况下我们采用另外一种中转跨域的方案:降子域通信。 下面介绍第二种方法:降子域通信:2.不支持PostMessage时,降子域通信由于a.qq.com和b.qq.com都是属于qq.com下的子域,同源策略在前端页面中判定依据是document.domain而不是location.host。而document.domain可写,可以人为更改到其父域名。这样a.qq.com和b.qq.com的两个页面都可以自行降到qq.com。这样就可以直接进行通信。 主要核心逻辑代码可以参考: 【a.qq.com页面代码】<!DOCTYPE html><html><head> <meta charset=“utf-8”></head><body> <script> //a.qq.com中逻辑: document.domain=“qq.com”; var $crossFrame=$("<iframe style=‘display:none’ src=‘http://b.qq.com/proxy.html'></iframe>").appendTo(document.body); //等待iframe中转页面load完毕 $crossFrame.on(“load”,function(){ //回调 window[‘callback’]=function(result){ //收到响应 console.log(“receive response:",result); } //调中转页面中的方法直接请求 $crossFrame.get(0).contentWindow.request({ api:"/xx/y”, data:{ a:1, b:2 } }); }) </script></body></html>【b.qq.com页面代码】<!DOCTYPE html><html><head> <meta charset=“utf-8”></head><body> <script> //b.qq.com中逻辑: document.domain=“qq.com”; window.request=function(api,data){ $.ajax({ url:api, data:data, //……. success:function(result){ //将response返回给a.qq.com window.parent.callback(result,"") }, fail:function(){ } }) } </script></body></html>在实际改造过程中,如果后端结果过多,或者改造不方便,可以直接采用第二种方式——中转代理的方式进行改造。其原理示意图总结如下: 图2 去Flash跨域请求改造指导图3.文件上传3.1 背景其实文件上传是HTML规范内的,理论上不需要使用Flash去做。但是随着ajax技术的兴起,Web 2.0时代的到来,input表单的提交改成ajax提交,页面无刷新的形式。但是这种形式下对于文件这类二进制文件无法提交,IE下本来有ActiveX 的FSO可以操作,但是插件的执行需要IE安全机制允许,很多情况下用户体验不好,而且兼容性也不是很好。于是这种背景下,FLash又担当起了一个新的功能:文件上传。 著名的jquery插件,ajaxupload.js就是用的Flash进行文件提交。3.2去Flash上传如何不使用Flash,上传文件,而且保证页面不刷新,是我们在去Flash上传工作中需要做的核心。下面针对不同的浏览器提供两套方案:3.2.1 【第一套方案】HTML5获取文件信息用FormData提交条件:支持HTML5 FileReader 和FormData 特性 做法:1.获取input表单的files对象 2.实例化FileReader对象,并解析files对象 3.解析之后输出base64编码的文件数据 4.base64的数据传入FormData 5.ajax提交FormData参考demo如下:<!DOCTYPE html><html><head> <meta charset=“utf-8”></head><body> <input type=“file” name=“test” id=“test” /> <script> $("#test").change(function(e){ var files=e.target.files; va fr=new FileReader(); fr.onload=function(e){ var fm=new FormData(); fm.append(“file_test”,e.target.result); //额外参数 fm.append(“sExtend”,“test”); //提交ajax $.ajax({ url:‘http://b.qq.com/cgi/', type:“POST”, dataType:json, data:fm, processData: false, // 不会将 data 参数序列化字符串 contentType: false, // 根据表单 input 提交的数据使用其默认的 contentType success:function(result){ console.log(result); }, fail:function(){ console.log(“failed”); } }); } fr.readAsDataURL(files[0]); }); </script></body></html>3.2.2 【第二套方案】低版本浏览器中用模拟表单提交条件:无任何条件,支持任何浏览器 做法:1.在页面上构建一个隐藏的iframe 2.在页面上构建一个form表单,表单中包含文件表单和其它附加字段表单,target设为上述iframe的id 3.上传文件动作触发时,调用form的submit方法 4.iframe中加载上传cgi,返回结果与父窗口通信,如果iframe与cgi跨域,则参考【第二部分:跨域请求】进行处理参考demo如下:<!DOCTYPE html><html><head> <meta charset=“utf-8”> <title>DEMO-上传文件</title></head><body> <!– 以a.qq.com上传到b.qq.com/upload/为例 –> <form action=“http://b.qq.com/upload/" enctype=“multipart/form-data” method=“post” target=“postframe” name=“fileform”> <!– 文件上传按钮 –> <input type=“file” name=“file_1” /> <!– 隐藏的附加字段 –> <input type=“hidden” name=“sExtend1” value=“test1” /> <input type=“hidden” name=“sExtend2” value=“test2” /> </form> <iframe src=”" frameborder=“0” style=“display:none;” id=“postframe”></iframe> <script> //监听文件基本信息 $("[name=file_1]").change(function(e){ var files=e.target.files; if(“undefined” == typeof files && e.target.value){ //IE9- files=[]; try{ files=[new ActiveXObject(“Scripting.FileSystemObject”).GetFile(e.target.value)]; }catch(err){ files=[{ name:e.target.value, type:“unkown” }]; } if(!files.length){ files=[{ name:e.target.value, type:“unkown” }]; } } //获取文件信息 console.log(files); }) //上传 $("[name=fileform]").submit(); //回调 window.fileCallback=function(result){ //处理result console.log(“文件上传成功”); } </script></body></html>总结 本文给出了笔者在实际工作中遇到的最常见的去Flash改造的三种场景,现以表格的形式简单概括如下: 现代H5早期低版本IE等视频播放使用H5的video标签没办法只能使用FLash,如果不用Flash,建议提醒用户升级浏览器跨域提交请求使用CORS,前后端结合中转代理(PostMessage或者降域)Ajax文件上传使用FileReader+FormData封装模拟表单提交到iframe结语去Flash不仅是对实现方案的一种兼容改造,更是对早已成熟的新技术新思路的运用。目前而言,不管是因为政策原因,还是因为性能或者其它兼容性原因,去Flash改造都是重要和紧迫的,本文是笔者在实际工作过程中总结出的最常见的三种去Flash场景和改造方案,供参考,不足之处还请不吝指正。相关阅读再论 ASP.NET 中获取客户端IP地址从零开始的Spring Session【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识 ...

October 17, 2018 · 2 min · jiezi