整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

ios7.1.2越狱美化插件推荐

ios7.1.2越狱美化插件推荐

果在前几天推送了ios7.1.2的更新,盘古越狱团队在第一时间发布微博证实盘古越狱工具支持ios7.1.2,苹果此次并没有修补越狱漏洞。这样,就有更多的iPhone用户加入了越狱的行列,而越狱的其中一大用处就是美化自己的系统界面,今天就带给大家几款很火的越狱美化插件推荐。

本文因为篇幅原因,只推荐插件,插件的具体使用方法,可以自行百度。

一、winterboard

winterboard作为越狱后排行第一的越狱美化插件,也是iPhone越狱主题美化的必备插件。所有的主题都要借助于winterboard来实现安装。

二、zeppelin

zeppelin是一款更换运营商标识的美化插件,可以将中国移动/联通字样换成图标或者自己喜欢的字。

三、barrel

barrel是一款动态翻页插件,一共有18种翻页方式,并且在不断更新。

四、Springtomiz3

Springtomiz3是越狱美化控不可错过的精品,它可以实现动画效果、系统功能、Dock、锁屏、图标、文件夹、状态栏、多任务管理器、通知中心等项目的定义设置,功能十分齐全和强大。

五、LockHTML3

LockHTML3是一款锁屏界面的美化插件,可以更换锁屏主题,隐藏锁屏界面的所有元素。

六、更多美化插件等待后续更新。

览器的按键事件

我们先从浏览器按键时间说起,

用JavaScript实现键盘记录,要关注浏览器的三种按键事件类型,

  • keydown
  • keypress
  • keyup

它们分别对应onkeydown、 onkeypress和onkeyup这三个事件句柄。一个典型的按键会产生所有这三种事件,依次是keydown,keypress,然后是按键释放时候的keyup。

KeyDown:在控件有焦点的情况下按下键时发生。

KeyPress:在控件有焦点的情况下按下键时发生。

KeyUp:在控件有焦点的情况下释放键时发生。

在这3种事件类型中,keydown和keyup比较底层,而keypress比较高级。这里所谓的高级是指,当用户按下shift + 1时,keypress是对这个按键事件进行解析后返回一个可打印的“!”字符,而keydown和keyup只是记录了shift + 1这个事件。

但是keypress只能针对一些可以打印出来的字符有效,而对于功能按键,如F1-F12、Backspace、Enter、Escape、 PageUP、PageDown和箭头方向等,就不会产生keypress事件,但是可以产生keydown和keyup事件。然而在FireFox中,功能按键是可以产生keypress事件的。

传递给keydown、keypress和keyup事件句柄的事件对象有一些通用的属性。如果Alt、Ctrl或Shift和一个按键一起按下,这通过事件的altKey、ctrlKey和shiftKey属性表示,这些属性在FireFox和IE中是通用的。

注意:

KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发KeyUp事件。

KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等 除了 F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键 外的ANSI字符

KeyPress 只能捕获单个字符,可以捕获单个字符的大小写,不区分小键盘和主键盘的数字字符。

KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn(截屏)所有按键

KeyDown 和KeyUp 可以捕获组合键,对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写,区分小键盘和主键盘的数字字符。

其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

keydown、keypress 按着不动会持续执行事件,keyup执行一次

在使用键盘的时候,通常会使用到CTRL+SHIFT+ALT 类似的组合键功能,通过KeyUp 事件能够来处理(这里说明一下为什么不用KeyDown,因为在判定KeyDown的时候,CTRL、SHIFT和ALT 属于一直按下状态,然后再加另外一个键是不能准确捕获组合键,所以使用KeyDown 是不能准确判断出的,要通过KeyUp 事件来判定 )

前端架构暴力拆解,源码解析,多年经验分享,请持续关注!

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 Chrono (v2)

Chrono 是 Javascript 中的自然语言日期解析器,它旨在处理大多数日期/时间格式并从任何给定文本中提取信息,内容包括:

  • 今天、明天、昨天、上周五等
  • 2013 年 8 月 17 日 - 2013 年 8 月 19 日
  • 本周五 13:00 - 16:00
  • 5 天前
  • 2 周后
  • 2013 年 8 月 17 日星期六 18:40:39 GMT+0900 (JST)
  • 2014-11-30T08:15:30-05:30

目前 Chrono 在 Github 上通过 MIT 协议开源,有超过 3.5k 的 star,值得尝试。

如何使用 Chrono (v2)

基础使用

首先需要通过 NPM 安装:

npm install --save chrono-node

然后直接在代码中引入即可:

import * as chrono from 'chrono-node';

chrono.parseDate('An appointment on Sep 12-13');

如果是 Node.js 环境,可以使用下面的代码:

const chrono=require('chrono-node');

// or `import chrono from 'chrono-node'` for ECMAScript

对于 Chrono 库来说,只需将字符串传递给函数 chrono.parseDate 或 chrono.parse 即可。

import * as chrono from 'chrono-node';

chrono.parseDate('An appointment on Sep 12-13');
// Fri Sep 12 2014 12:00:00 GMT-0500 (CDT)

chrono.parse('An appointment on Sep 12-13');
/* [{ 
    index: 18,
    text: 'Sep 12-13',
    start: ...
}] */

解析参考(日期/时区)

今天的“星期五”与上个月的“星期五”不同,引用日期的含义取决于它们被提及的时间和地点。 Chrono 允许开发者将引用定义为 Date 或 ParsingReference 对象:

// (Note: the exmaples run on JST timezone)
chrono.parseDate('Friday', new Date(2012, 8 - 1, 23));
// Fri Aug 24 2012 12:00:00 GMT+0900 (JST)

chrono.parseDate('Friday', new Date(2012, 8 - 1, 1));
// Fri Aug 03 2012 12:00:00 GMT+0900 (JST)

chrono.parseDate('Friday at 4pm', {
  // Wed Jun 09 2021 21:00:00 GMT+0900 (JST)
  //=Wed Jun 09 2021 07:00:00 GMT-0500 (CDT)
  instant: new Date(1623240000000),
  timezone: 'CDT',
});
// Sat Jun 12 2021 06:00:00 GMT+0900 (JST)
//=Fri Jun 11 2021 16:00:00 GMT-0500 (CDT)

解析配置

forwardDate(布尔值)假设结果应该在参考日期之后发生。

const referenceDate=new Date(2012, 7, 25);
// Sat Aug 25 2012 00:00:00 GMT+0900 -- The reference date was Saturday

chrono.parseDate('Friday', referenceDate);
// Fri Aug 24 2012 12:00:00 GMT+0900 (JST) -- The day before was Friday

chrono.parseDate('Friday', referenceDate, { forwardDate: true });
// Fri Aug 31 2012 12:00:00 GMT+0900 (JST) -- The following Friday

timezones 覆盖或添加时区缩写和偏移量之间的自定义映射。 当希望 Chrono 将某些文本解析为给定的时区偏移量时,请使用此选项。 Chrono 支持明确的(正常)时区映射和模糊映射,其中夏令时期间和之外的偏移量不同。

// Chrono doesn't understand XYZ, so no timezone is parsed
chrono.parse('at 10:00 XYZ', new Date(2023, 3, 20))
// "knownValues": {"hour": 10, "minute": 0}

// Make Chrono parse XYZ as offset GMT-0300 (180 minutes)
chrono.parse('at 10:00 XYZ', new Date(2023, 3, 20), { timezones: { XYZ: -180 } })
// "knownValues": {"hour": 10, "minute": 0, "timezoneOffset": -180}

// Make Chrono parse XYZ as offset GMT-0300 outside of DST, and GMT-0200 during DST. Assume DST is between 
import { getLastDayOfMonthTransition } from "timezone";
import { Weekday, Month } from "parsing";

const parseXYZAsAmbiguousTz={
  timezoneOffsetDuringDst: -120,
  timezoneOffsetNonDst: -180,
  dstStart: (year: number)=> getLastWeekdayOfMonth(year, Month.FEBRUARY, Weekday.SUNDAY, 2),
  dstEnd: (year: number)=> getLastWeekdayOfMonth(year, Month.SEPTEMBER, Weekday.SUNDAY, 3)
};
// Parsing a date which falls within DST
chrono.parse('Jan 1st 2023 at 10:00 XYZ', new Date(2023, 3, 20), { timezones: { XYZ: parseXYZAsAmbiguousTz } })
// "knownValues": {"month": 1, ..., "timezoneOffset": -180}

// Parsing a non-DST date
chrono.parse('Jun 1st 2023 at 10:00 XYZ', new Date(2023, 3, 20), { timezones: { XYZ: parseXYZAsAmbiguousTz } })
// "knownValues": {"month": 6, ..., "timezoneOffset": -120}

参考资料

https://github.com/wanasit/chrono

https://dexlock.com/blog/a-dive-into-nlp-date-parsers/