HTML5的DND API好恶心哦

0

HTML5将Drag and Drop标准化的过程中,为了省事,将M$的那一套DnD搬了过来(M$好不容易有些东西变成标准,却又这么让人纠结…lol)。然后就是各种的莫名其妙:

  1. dragenterdragover事件的存在就是让web开发者调用e.preventDefault()
  2. dragenterdragleave会因为鼠标划过children而出现多次。并且次序是反的。
  3. DnD事件那么多种,我都数不过来了。
  4. 各种DnD事件里面获得的FileList不能获取绝对路径(这个其实属于FileSystem那边的问题,虽然可以理解,但是这样限制,本地应用根本没法弄)。
  5. element如果没有监听drop事件,用户就不能在这个element放东西。并且dragenterdragover默认的操作就是禁止用户拖放。。。结果不监听任何DnD事件的body,却又默认接受一切的拖放,这是要闹哪样啊?

结果如果想利用Webkit做Native Client App的话(我有没有说搭配[ember.js]其实是很爽的事情呢?),想用HTML5的DnD,就只能在自己的App Thin Wrapper里做非标准的实现了。

JS检测Image的加载

0

Background

页面中所有指向大图的链接,在被点击时不跳转,而是直接显示该大图。为了能尽快可以加载这些大图,它们会在页面完全加载完后,自动预加载。
JS代码要做的是点击链接时,需要判断图片是否能立刻显示

Issue

Firefox quirkies

FF里面,一旦一个Image对象加载完成,它的complete属性就变成true,并且一直为true,即使修改src属性去加载另外的图片:

1
2
3
4
5
6
7
var img = new Image();
img.src = 'loaded_pic.jpg';
console.log(img.complete == true);

img.src = 'not_loaded_pic.jpg';
// 加载没有cache的图片,这里img.complete本来应为false,但FF不重设img的complete属性。
console.log(img.complete == true);
  • 每次都要用全新的Image对象检测图片是否能立刻显示

Chrome quirkies

Chrome的complete很飘忽,好难捉摸啊:

  • 显示过的图片,complete一定(?)为true
  • 没Cache的图片,在没加载完成前,complete肯定为false (理所当然嘛)
  • Cache了的图片就用代码说明好了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
imgURL        = 'cached.jpg';    // 缓存图片路径
anotherImgURL = 'cached2.png';   // 另外一个缓存了的图片路径
globalImg     = new Image();     // 全局用预加载器

function onDocReady() // 页面加载完成后调用
{
    var preloadImg = new Image();
    preloadImg.src = imgURL;           // 第一次请求加载该图片
    console.log(preloadImg.complete == false); // 即使缓存了,complete铁定也是false

    var preloadImg2 = new Image();
    preloadImg2.src = imgURL;          // 立马再请求一次
    console.log(preloadImg.complete == false); // 依然是false

    globalImg.src = anotherImgURL;     // 用全局的来预加载
}

function onLinkClick() // 点击某个链接时调用
{
    var img = new Image();
    img.src = imgURL;
    // 之后再加载该图片,complete有可能是true,也可能是false
    console.log(img.complete == false || img.complete == true);

    var img2 = new Image();
    img2.src = anotherImgURL;
    // 用全局的预加载的话,这个一定为true。
    console.log(img.complete == true);
}

结论就是:

  1. 图片的complete属性最起码要在下一次代码调度时才会更改。
  2. 如果指向图片A的所有Image对象都被GC,而且这个图片A并没有在页面显示过,则再创建Image对象,将它src设为链接A,它的complete属性要在下次调度时才会变成ture。(将预加载放在一个全局对象里面,它就不被回收)
JS

开始用Octopress写Blog

0

嗯, 貌似用Octopress的循例是将初夜(初篇)献给八爪君的各种触手. 那么我也来写写好了.

很多宅与Hacker都已经吐槽(解释)过如何打造自己的触手系博客了. 所以就再也没有必要在这个方面啰嗦啦, 还是说说日常的blog方面吧…

xVim v0.12

0

So xVim has updated to 0.12.

Fixed some bugs Added a little more key binding like (ctrl+u and ctrl+d). Added a simplified key-mapping feature, so that you can type ‘jk’ or other stuff in insert mode to switch back to normal mode. some motions, % and visual mode are still not implemented.

BTW, xVim is a SIMBL plugin to add vim like key-binding to Xcode and other application that uses NSTextView.

Check it out in github repo

Currently supported are Xcode, espresso and chocalat.

(TextMate does not use NSTextView, so if someone wants to use vim in TextMate, they should use Vico app.)

M$的东西怎么这么让人不敢恭维啊。。

0

就拿图形来说。现在M$就有三套图形的API:

GDI

倒胃口的是: C API不支持Alpha 唯一就是硬件加速。同时搭配上GDI++(这玩意可不是M$自己出的, 阿鲁),可以达到Mac的字体渲染效果。

GDI+

C++ API不支持硬件加速。使用方便,可以图像处理,效率却不高。

Direct2D

第三个Direct2D(DirectDraw悲催要到墙角画圈圈了…),看上去很优秀的:

  • 轻便的COM接口,比较易用。
  • 硬件加速的哦, 亲。。

可惜硬件加速的是绘图,不是图像处理。。图像处理方面的能力基本上为0。这个是不是因为GPU只懂得vertex之类的东西,而不懂像素的关系呢? D2D本身没有支持让你直接操作像素数据的API,例如你只是想修改一个像素的值,noway。。当然也不是绝对的,你可以通过WIC来获取那些像素,但是仅仅限于软件渲染的RenderTarget。如果一个RenderTarget是硬件加速的,你就没有办法用WIC来获取这个RenderTarget上面的数据了。

M$

在看Why Is Chinese Web Design So Bad

0

刚才看到一篇文章Why Is Chinese Web Design So Bad。文章是一个叫Nick Johnson的人在吐槽中国网站设计得so bad。 我没仔细看原文这种事情, 我会告诉你么。有看头的其实是那篇文章后面那堆评论。

就算很多人点了like,我也只能说,lovebk的评论超反感啊!看得出愤青的他已经恼羞成怒,结果就语无伦次喷了人家一面。虽然Nick是绝对不会知道他在说啥,因为我也不清楚那个comment的主旨啊。但是,喂,lovebk,你的节操掉了一地,麻烦扫一扫好么。。。Anyway, 正如lovebk所言,Nick确实挺片面的,但是我觉得整篇文章的目的在于探讨那种中国风的设计风格,而不是在谩骂中国的设计师如何的低质。

Nick Johnson说中国的网站设计不好,是说这些网站喜欢整合一切可能的数据在网页上,趋于繁杂。而西方则流行简洁优雅的风格。 但Nick不晓得与资本主义国家不同的是,在中国,这些展现出来的东西,并不都是设计师的思想。它们更多出自于其他领域的人的想法,这些人可以对设计一窍不通,但是最终的产品却都是他们把关,设计师只是在”工作”而已。所以说中国这些“丑陋的”网站其实无所谓设计不设计,只要它们成功迎合了中国网民的需求,或者中国网民愿意接受它们的“丑陋的一面”,之后这个网站赚到钱了,成功了。要知道,他们是商人,他们不是设计师,跟他们说你们设计师崇尚的设计观念是行不通的。

设计优雅的中国网站不是没有,但是你未必看得到。能跟从设计师的理念诞生的网站,它本身属于这个设计师。而在中国,很多设计师都没有影响力。因为他们没钱没权力,这个网站没影响力。所以Nick问他周围的人,也只能问出诸如百度,新浪这种网站。

Qt与MSVC的中文问题

0

因为之前发布了GCC编译的TwitWar,结果在有些人的xp系统下面出现Runtime Error。主要是调用插件,而这个插件又调用了其他的dll文件。。。然后一直解决不了,最后还是决定用MSVC2008编译。。还好最后结果还不错。。(但是有个同学说他没能加载插件,真悲催。。。)

如果用MSVC2008编译的话,源代码的编码格式是绝对不可以是UTF-8 without BOM的。因为该死的MSVC只认UTF-8 without BOM。。。如果你保存的编码格式是UTF-8 with BOM,那么你用Qt的时候,十有八九会乱码。。

目前我觉得最稳妥的方法是: