浏览模式: 标准 | 列表分类:Javascript
Submitted by gouki on 2010, September 7, 11:00 AM
智能手机现在是越来越被大众接受,即使是诺基亚那可怜的S40,也能将就着算是智能机吧。关键这些智能机里都有一些浏览器了。比如opera mini,opera mobile之类的,再象android那样的话就是Webkit,IOS也算是Webkit核心了(ff也要登录android之类的),opera也在各个平台都有着自己的版本。因此,我们可以假设,只要是智能手机,都能支持一些简单的JS了。但是我怎么知道哪些浏览器支持的JS在其他浏览器上不支持呢?如果只用最简化的功能,那意义就不大了。因此,支持智能手机的JS框架就比较让人心动了。
一、jQuery Mobile
jQueryMobile不像前面SproutCore 或者Sencha Touch,它没有提供一个完整的应用架构。但它是一个新的开始,其也以向移动网站应用提供更多本地化的控制为宗旨。jQuery Mobile项目宣布其要成为“完整的,统一的,移动UI架构”。 jQuery Mobile核心项目也将继续为移动提供优化,但jQuery Mobile更专注于为主流智能手机浏览器提供一种真正的顶级的JS体验和界面。
官方网址:http://jquerymobile.com/
支持列表:http://jquerymobile.com/gbs/
二、Sencha Touch
Sencha前身是Ext JS ,全名是Sencha Touch HTML5 mobile framework.它提供一种可跨平台的架构,目前支持IOS,Android将在不久后得到支持。这种在线摸触摸技术结合了一个UI库的独立解决方 案,触摸项目管理、地理技术支持、离线缓存技术以及特殊的CSS和CSS3功能。
官方网址:http://www.sencha.com/products/touch/
演示地址:http://www.sencha.com/products/touch/demos.php
三、YUI 3.2
雅虎将发布最新的JS实用程序的YUI库。YUI最新版对触摸和移动设备提供更多更好的支持
官方网址:http://yuilibrary.com/
四、iUI
iUI是一个iPhone用户界面架构,其设计目标是像移动网站应用提供更接近iPhone的体验。它的工作原理是结合WEBKIT为基础的设备以及包括一个JS库和CSS及图形。其最早追溯至2007年,但多年以来缓慢地升级以提供更多其他设备,甚至是iPad。
官方网址:http://code.google.com/p/iui/
五、SproutCore
SproutCore是一个HTML5的架构,目标帮助开发者建立桌面口径的web应用,并且支持任何浏览器下无需补丁的运行。其项目带头大哥已经辞去了其原本苹果的职位,专心致志地来完成此项目。
官方网址:http://www.sproutcore.com/
演示地址:http://demo.sproutcore.com/
六、XUI
在开发Phonegap时,XUI团队对应用于移动设备的现存JS库及表现很失望。XUI创建的初衷是跨多个移动浏览器工作,其包括WEBKIT,Fennec,Opera。其目标是为低成本条件下解决传统JS库不适合移动浏览器,提供更多跨兼容的方案。
官方网址:http://xuijs.com/
英文原版:http://mashable.com/2010/08/18/mobile-web-app-frameworks/
内容来自:http://www.biaodianfu.com/make-your-mobile-websites-act-like-apps.html
Tags: 智能手机, js框架
Javascript | 评论:1
| 阅读:24007
Submitted by gouki on 2010, September 6, 5:07 PM
看到cssrain.cn上这篇博客介绍的不错。挺有意思,虽然这个功能在很久以前就有人实现过。。。但现在看来又有不同的感觉
或许大家都记得,在几年前,网页特效中就有一个效果是网页正在下载数据,请稍等。然后是一个进度条,等完毕后,网页就打开了。其实说的就是Cssrain上的效果。不过几年前没有想过要兼容如今这么多的浏览器。所以,还是可以再了解一下(相册网站之类的可能会需要)
----START--
先定义一个图片的数组,然后通过image的onload事件来计算,注意,onload在ie和火狐有所不同。
最后需要一个进度条与之结合即可。
这个脚本在做游戏的地方用得比较多。
http://cssrain.cn/demo/plantsvs/loadImg.html
» 阅读全文
Javascript | 评论:0
| 阅读:16492
Submitted by gouki on 2010, August 30, 10:00 AM
习惯了用jQuery,因此在使用greasemonkey的时候,也总是想着用jQuery,找了下,确实有这样的例子。。
JavaScript代码
- var $;
-
-
- (function(){
- if (typeof unsafeWindow.jQuery == 'undefined') {
- var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
- GM_JQ = document.createElement('script');
-
- GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
- GM_JQ.type = 'text/javascript';
- GM_JQ.async = true;
-
- GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
- }
- GM_wait();
- })();
-
-
- function GM_wait() {
- if (typeof unsafeWindow.jQuery == 'undefined') {
- window.setTimeout(GM_wait, 100);
- } else {
- $ = unsafeWindow.jQuery.noConflict(true);
- letsJQuery();
- }
- }
-
-
- function letsJQuery() {
- alert($);
- alert($().jquery);
- }
然后代码就得全部扔在letsJQuery()方法里了。
由于是async,所以,尽量选择快一点地址,比如本地的localhost之类的,HOHO,不过,这就得本地WEB服务常开了。
原文来自:http://joanpiedra.com/jquery/greasemonkey/
Tags: greasemonkey, jquery
Javascript | 评论:0
| 阅读:19439
Submitted by gouki on 2010, August 24, 2:04 PM
在PHP中,我们打印一个数组或者对象的时候,都是用print_r,相对比较直观,可是javascript就不行。翻了翻资料,也看到一些代码的写法。这里是一个简单的处理(不能打印window,document等对象):
JavaScript代码
- function print_r( $value ){
- if($value.constructor == Array || $value.constructor == Object ){
- document.write("<ul>");
- for (var $i in $value){
- if($value[$i].constructor == Array || $value[$i].constructor == Object ){
- document.write("<li>["+$i+"] => " + typeof( $value ) + " </li><ul>");
- print_r($value[$i]);
- document.write("</ul>");
- }else{
- document.write("<li>["+$i+"] => " + $value[$i] + "</li>");
- }
- }
- document.write("</ul>");
- }
- }
- var s = {};
- s.i = '123';
- s.o = {};
- s.o.test = 'tt';
- print_r(s);
然后看了一下phpjs.org,它上面的print_r就比较复杂了。。。
JavaScript代码
- function print_r (array, return_val) {
-
-
-
-
-
-
-
-
-
-
-
- var output = "", pad_char = " ", pad_val = 4, d = this.window.document; var getFuncName = function (fn) {
- var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);
- if (!name) {
- return '(Anonymous)';
- } return name[1];
- };
-
- var repeat_char = function (len, pad_char) {
- var str = ""; for (var i=0; i < len; i++) {
- str += pad_char;
- }
- return str;
- };
- var formatArray = function (obj, cur_depth, pad_val, pad_char) {
- if (cur_depth > 0) {
- cur_depth++;
- }
- var base_pad = repeat_char(pad_val*cur_depth, pad_char);
- var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
- var str = "";
- if (typeof obj === 'object' && obj !== null && obj.constructor && getFuncName(obj.constructor) !== 'PHPJS_Resource') {
- str += "Array\n" + base_pad + "(\n";
- for (var key in obj) {
- if (obj[key] instanceof Array) {
- str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char); } else {
- str += thick_pad + "["+key+"] => " + obj[key] + "\n";
- }
- }
- str += base_pad + ")\n"; } else if (obj === null || obj === undefined) {
- str = '';
- } else {
- str = obj.toString();
- }
- return str;
- };
-
- output = formatArray(array, 0, pad_val, pad_char);
- if (return_val !== true) {
- if (d.body) {
- this.echo(output);
- } else {
- try {
- d = XULDocument;
- this.echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">'+output+'</pre>');
- } catch (e) {
- this.echo(output);
- }
- }
- return true; } else {
- return output;
- }
- }
果然是没有做不到的事,只有想不到的事呀。。。(上面的phpjs.org的print_r需要echo方法,请到phpjs.org下载)
Tags: print_r, php
Javascript | 评论:0
| 阅读:22354
Submitted by gouki on 2010, August 22, 11:32 PM
用javascript做模版的话,说来也算是比较方便的,特别是对于PHP开发来说,只要扔一个json数组过来。然后剩下的就可以让javascript来完成了。
搜索一下jQuery的plugin,可以找到大约5~6个模版程序。好象用的比较多的还是jTemplate,上一次司徒正美用javascript写了一个简单的例子,这次又写了一个比较详细的,说是v2,有兴趣的朋友可以尝试一下。。
--start--司徒正美认为模版要处理复杂的玩意,所以写的功能就强大了。
本版本主要是对原模板系统进行提速,去掉消耗巨大的辅助函数。本来想用它与John Resig的 Micro-Templating比较一下速度,发现对方无法处理复杂的模板,残念。
JavaScript代码
-
- (function () {
- if(!String.prototype.trim){
- String.prototype.trim = function(str) {
- return this.replace(/^[\s\xa0]+|[\s\xa0]+$/g, '');
- }
- }
- var dom = {
- quote: function (str) {
- str = str.replace(/[\x00-\x1f\\]/g, function (chr) {
- var special = metaObject[chr];
- return special ? special : '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4)
- });
- return '"' + str.replace(/"/g, '\\"') + '"';
- }
- },
- metaObject = {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '\\': '\\\\'
- },
- parser = document.createElement("div"),
- startOfHTML = "\t__views.push(",
- endOfHTML = ");\n";
-
- //onsite,可选,Boolean,是否就地替换掉模板容器,默认true,如果为false,则返回一个文档碎片,交由用户自己插入到需要的地方
- dom.ejs = function (obj) {
- var onsite = obj.onsite === void 0 ,
- left = obj.left || "<%",
- right =obj.right || "%>",
- selector = obj.selector,
- isLeft = true,
- buff = ["var __views = [];\n"],
- fragment = document.createDocumentFragment(),
- el = document.getElementById(selector),
- ejs = dom.ejs;
- if (!el) throw "找不到目标元素";
- var str = el.text.trim();
- if(!ejs[selector]){
- while(str.length){
- var condition = isLeft ? left :right;
- var index = str.indexOf(condition);
- if(index !== -1){//取左边
- var text = str.slice(0,index);
- if(isLeft){
- buff.push(startOfHTML, dom.quote(text.trim()), endOfHTML);
- }else{
- switch (text.charAt(0)) {
- case "#"://处理注释
- break;
- case "="://处理后台返回的变量(输出到页面的);
- buff.push(startOfHTML, text.slice(1), endOfHTML)
- break;
- default:
- buff.push(text, "\n")
- };
- }
- }else{
- if(isLeft){
- buff.push(startOfHTML, dom.quote(str), endOfHTML);
- break;
- }else{
- throw "在字符串{{ "+dom.quote(str)+" }}中找不到右界定符"+right
- }
- }
- str = str.slice(index+2).trim();
- isLeft = !isLeft;
- }
- ejs[selector] = new Function("json", "with(json){"+buff.join("") + '};return __views.join("");')
- }
- parser.innerHTML = ejs[selector](obj.json || {});
- while (parser.firstChild) {
- fragment.appendChild(parser.firstChild)
- }
- return onsite ? el.parentNode.replaceChild(fragment, el) : fragment;
- };
- window.dom = dom;
-
- })();
这种使用原生代码写的例子,可以被任何代码所使用,如果你有兴趣也可以看看司徒正美的例子的。原文网址在javascript 模板系统 ejs v2,可以移步一观。
Tags: jquery, template, 模版, 模板
Javascript | 评论:0
| 阅读:19347