那些年,我们一起追过的女孩

看完了这本书了。

看完了这部电影了。

总有再去看一次这本书的冲动,虽然我已经看过了。

但毕竟,那都是我们的青春,在九把刀的笔下,记忆中的点点滴滴,仿佛重现。

虽然我没有那么好文笔,但是我总觉的要写点什么,纪念一下我的青春。

爱情往往从偏见开始。互看不顺眼,就是彼此关注的起点。
以为最讨厌的,换个角度,看见了隐藏的另一面,就成了最喜欢。
最难忘的,原来最简单。
柯景腾和沈佳宜打赌,他输了以後,愿赌服输理了平头,没输的沈佳宜也若无其事梳了马尾来上课。我喜欢两人之间不着痕迹,只有彼此心知肚明的的默契。
不说喜欢,却在意你说的任何一句话,这才是打从心底的喜欢。
两人分离多年以後,九二一大地震成为衔接彼此的桥梁。电话里的他们像往常一样轻松聊天,悄悄藏起伤害,彷佛不曾断线。
她是他美好的初恋,也是他永远的青春。
电影的最后,沈佳宜说了一句:谢谢你喜欢我。柯景腾:我也很喜欢当年那个喜欢你的我。
相信不管多少年,我们依旧会深深喜欢青春光时那个无论如何都要偏执去爱的自己。九把刀:有爱才会有意志力,我深有同感。如果你曾花几年的时间去爱一个人,不管最後能否修成正果,你一定能在爱她(他)的过程中,成为更好的自己;也因曾为一个人不顾一切的付出,才会有後来更坚定去爱的自己。

每个人心中都会有一个沈佳仪,曾经坐在你的后面,用笔捅过你的背后。就像电影里最后的一个画面,一件捅满笔迹的校服。

虽然青春已经不在。

“You are the apple of my eyes.”

听过本片国内的上映日期是2012年1月6日,我知道必定会删减的很厉害。但是,还是想要去看看。可以跟你的死党一起,如果你的女朋友是你的初恋,那么请带上她吧。

—-EOF—-

[蔡康永] 有一天啊,宝宝

原文:http://blog.yuedu.fm/?p=258

现场演唱会。

 

八个朋友,围着大房子里的大木头桌,吃完布丁以后,开始说每个人去过的现场演唱会。

 

没有人够老得赶上披头四,但有人竟然听过鲍勃?迪伦的现场,大家赞叹了一下。另外几个人讲起自己哭得最凶的演唱会,都不是很有名的。妮塔说起她在纽 约一个荒废剧院里听的那场演唱,她感动的不是主角,而是半途以神秘嘉宾身份现身的、当时一个刚从勒戒中心放出来、因为遗传白化症而披着满头白发的年轻女歌 手。

 

芮塔则说起一个喜欢单脚站立整场演唱会、疯狂吹笛的吹笛手。

 

“他们都只有名那几年,后来就没什么人知道了,有名大概也不是太吸引他们的事吧。”她们说。

 

我参加过的演唱会,全场最多人的大概六万人、最少的大概八十人。每次我都好感动、好高兴。我喜欢看几万个人接力的、把手上喷火花的火花棒一个接一个 地散布到全场都是。我喜欢在场里挤满快让人窒息的热情的时候,抽空抬头看天上的星星。我也喜欢在小酒馆里看有的人醉着有的人吻着,听着自己也醉了的满头白 发的歌手,在唱我怎么听都还是会流眼泪的歌。

 

宝宝,我为什么一直对电视很有戒心,是因为电视老是让你以为,你听过那个歌了,但其实你没听过;老是让你以为你看过那个人了,但其实你没看过;老是让你以为你知道灾难与死亡了,但其实你不知道。

 

我每次在现场感动得要命的事,后来再透过电视看到的时候,根本感觉不出来是同一件事情。电视好像渔网,把有生命的都拦截在网子的那一边,到这一边流出来的,都只是水而已。

 

亲爱的宝宝,将来如果有你喜欢的歌手,你要想办法去听他的现场演唱会,去跟其他和你一样喜欢他的人在一起。你不知道那个歌手会有名多久,你也不知道他会愿意活多久。你只能趁他还在的时候,让他变成你回忆的一部分。

 

有些人的生命没有风景,是因为他只在别人造好的、最方便的水管里流过来流过去。你不要理那些水管,你要真的流经一个又一个风景,你才会是一条河。

XMLHttpRequest简单用法

AJAX为“Asynchronous JavaScript XML”(异步的JavaScript与XML技术),是一种广泛应用在浏览器的网页开发技术。Ajax是多项技术的综合应用,Ajax概念由 Jesse James Garrett 所提出,AJAX:

  • 运用XHTML+CSS来表达信息;
  • 运用JavaScript操作DOM(Document Object Model)运行动态效果;
  • 运用XML和XSLT进行数据交换及操作;
  • 运用XMLHttpRequest为Agent与网页服务器进行异步数据交换;
  • 运用JavaScript技术实现。

类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如AFLAX。

来自wiki对Ajax技术的一段说明。使用jQuery封装的ajax多了,同时对原生的ajax技术产生兴趣,异步刷新的核心是XMLHttpRequest这个对象,Come On~
查看demo页面

一、创建一个XMLHttpRequest对象

XMLHttpRequest对象并没有标准化,在IE和其他浏览器创建的过程不相同。幸运的是,使用XMLHttpRequest对象的API在所有浏览器都是一样的。

这是一段来自wiki的代码

// Provide the XMLHttpRequest class for IE 5.x-6.x:
// Other browsers (including IE 7.x-8.x) ignore this
// when XMLHttpRequest is predefined
var xmlHttp;
if (typeof XMLHttpRequest != "undefined") {
    xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
    var aVersions = ["Msxml2.XMLHttp.5.0", "Msxml2.XMLHttp.4.0", "Msxml2.XMLHttp.3.0", "Msxml2.XMLHttp", "Microsoft.XMLHttp"];
    for (var i = 0; i < aVersions.length; i++) {
        try {
            xmlHttp = new ActiveXObject(aVersions[i]);
            break;
        } catch (e) {}
    }
}

考虑到5.0,4.0,3.0的使用率,So,稍微修改一下。

var ajax = {
	create : function(){
		//创建一个XMLHttpRequest对象
		var ajaxObj = null;
		try{
			ajaxObj = new XMLHttpRequest();
		}catch(e){
			//在MS XML HTTP库的不同版本中,对象的名字也是不一样的
			try{
				ajaxObj = new ActiveXObject("Msxml2.XMLHTTP");
			}catch(e){
				ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		return ajaxObj;
	}
}

ok,这样我们就创建好XMLHttpRequest对象了。

二、指定http请求并向服务并像一个web服务器提交

var ajax = {
	//...创建函数
	send : function(method, url, data){
		//创建一个httpRequest对象
		var _this = this, ajaxObj = _this.create();
		if(ajaxObj == null){
			alert("Oop! 你的浏览器不支持Ajax")
			return false;
		}
		//请求URL
		ajaxObj.open(method, url, true);
		//发送data
		ajaxObj.send(data);
	},
	get : function(url){
		this.send("GET", url, null);
	},
	post : function(url, data){
		this.send("POST", url, data);
	},
	start : null,
	end : null
}

1.open()方法用来指定所请求的URL以及该请求的HTTP方法,默认是设置一个异步的请求,open()并不发送数据,它只是保存自己参数。
2.send()函数是请求方法,通常是GET或POST。对于HTTP GET请求,参数总为null,POST的话,包含的是要发送到服务器的表单数据。

三、获取服务器响应

对于服务器返回来的状态通过onreadystatechange属性来获取,readyState是指定一个HTTP请求状态的值(0、1、2、3、4)。status则返回请求请求代码值(200、404)等。
XMLHttpRequest的readyState值
0 -> open()还没有调用
1 -> open()已经调用,但是send()还没有调用
2 -> send()已经调用,但是服务器还没有响应
3 -> 正在从服务器中载入数据,本状态在FF和IE中略有不同(如果请求文档过大,FF或多次调用本状态,IE不管文档大小只调用一次)
4 -> 服务器响应完成

var ajax = {
	//...创建函数
	send : function(method, url, data){
		//创建一个httpRequest对象
		//...

		//处理请求状态,包括返回数据
		ajaxObj.onreadystatechange = function(){
			//请求成功
			if(ajaxObj.status == 200 && ajaxObj.readyState == 4){
				//alert(ajaxObj.responseText);
				//回调函数
				if(typeof _this.end == "function"){
					_this.end(ajaxObj.responseText);
				}
			}
		}

		//请求URL, 发送data
		//...
	}
}

jquery简单动画

今天心血来潮,就研究了一下JQ自定义动画的一些简单用法。点击这里查看效果
下面是JS代码.

$(function(){
	//定义easing
	jQuery.easing.def = 'easeInQuad';
	var sel1 = $("<select>").appendTo('#controls');
	for (x in jQuery.easing)
	{
		if (x != 'linear' && x != 'swing')
            sel1.append($('<option>').attr('value', x).text(x));
	}
	sel2 = sel1.clone().appendTo('#controls');
	sel3 = sel1.clone().appendTo('#controls');
	sel4 = sel1.clone().appendTo('#controls');

	sel1.val('easeInOutCirc');
	sel2.val('easeOutBounce');
	sel3.val('easeInCubic');
    sel4.val('easeInElastic');

	//第一个动画 单向运动
	$(".inline_box:eq(0)").bind('click', function(){
		var _this = $(this), _width = _this.width() - _this.find('span').width();
		_this.find('span').animate({left: '+'+ _width +'px'}, 1500, "linear");
	});
	//第二个动画 双向运动
	$(".inline_box:eq(1)").toggle(function(){
		var _this = $(this), _width = _this.width() - _this.find('span').width();
        _this.find('span').animate({left: '+'+ _width +'px'}, 1500);
	},function(){
		var _this = $(this), _width = _this.width() - _this.find('span').width();
        _this.find('span').animate({left: '-0px'}, 1500);
	});
	//第三个动画 自动双向
	$(".inline_box:eq(2)").bind('click', function(){
        var _this = $(this), _width = _this.width() - _this.find('span').width();
        _this.find('span').animate({left: '+'+ _width +'px'}, 1500, function(){
			$(this).animate({left: '-0px'}, 1500);
		});
    });

	//第四, 重复执行
	$(".inline_box:eq(3)").bind('click', function(){
        //预先执行一次动画
		animateFun.setIntervalAnimate();
		//设置时间间隔触发动画
		setInterval(function(){
            animateFun.setIntervalAnimate();
        }, 4000);
    });

	//第五,缓冲效果
	$(".inline_box:eq(4)").bind('click', function(){
        var _this = $(this), _width = _this.width() - _this.find('span').width();
		//var method1 = sel1.val();
		//var method2 = sel2.val();
        _this.find('span').animate({left: '+'+ _width +'px'},{duration: 1500, easing: 'easeOutBounce'});
    });

	//第六,扩大消失
	$(".inline_box:eq(5)").bind('click', function(){
        var _this = $(this), _width = _this.width() - _this.find('span').width();
        var method1 = sel1.val();
        var method2 = sel2.val();
        var method3 = sel3.val();
        var method4 = sel4.val();
        _this.find('span').animate({left: '+'+ _width +'px'},{duration: 1500, easing: method1})
		    .animate({top: '+200px'},{duration: 1500, easing: method2})
			.animate({left: '-0px'},{duration: 1500, easing: method3})
			.animate({top: '-0px'},{duration: 1500, easing: method4});
    });

	var animateFun = {
		"setIntervalAnimate" : function(){
		var _obj = $(".inline_box:eq(3)"), _child = _obj.find('span'), _width = _obj.width() - _child.width();
			_child.animate({left: '+'+ _width +'px'}, {duration: 1500, easing: 'easeOutCubic'}).animate({left: '-0px'}, {duration: 1500, easing: 'easeOutBounce'});
		}
	}
})

14个有用的jQuery技巧[转]

1.通过方法返回Jquery对象实例

//用
var someDiv = $('#someDiv').hide();
//代替
var someDiv = $('#someDiv');  someDiv.hide();

2.使用find来查找

//用
$('#someDiv').find('p.someClass').hide();
//代替
$('#someDiv p.someClass').hide();

因为可以不必触发Jquery的Sizzle引擎,同时在写选择符的时候尽量让您的选择符简单同时优化最右边的选择符

3.不要滥用$(this)

//用
$('#someAnchor').click(function() {
    alert( this.id );
});
//代替
$('#someAnchor').click(function() {
    alert($(this).attr('id'));
});

4.ready的简写形式

//用
$(function() { });
//代替
$(document).ready(function() {});

5.让你的代码安全

//方法1(使用noConflict)
var j = jQuery.noConflict();
j('#someDiv').hide();
// The line below will reference some other library's $ function.
$('someDiv').style.display = 'none';

//方法2(传入参数Jquery)
(function($) {
// Within this function, $ will always refer to jQuery
})(jQuery);

//方法3(通过ready方法)
jQuery(document).ready(function($) {
// $ refers to jQuery
});

6.简化代码
用each代替for,使用数组保存临时变量,使用document fragment,这其实和写原生的Javascript需要注意的一样。

7.使用Ajax的方法
Jquery提供了get getJSON post ajax这些有用的ajax方法

8.访问原生的属性和方法

//比如获取元素id的方法有
// OPTION 1 - Use jQuery
var id = $('#someAnchor').attr('id');
// OPTION 2 - Access the DOM element
var id = $('#someAnchor')[0].id;
// OPTION 3 - Use jQuery's get method
var id = $('#someAnchor').get(0).id;
// OPTION 3b - Don't pass an index to get
anchorsArray = $('.someAnchors').get();
var thirdId = anchorsArray[2].id;

9.使用PHP来检查Ajax请求
通过使用xhr.setRequestHeader(“X-Requested-With”, “XMLHttpRequest”); 服务器端如PHP就可以通过

function isXhr() {
    return $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
}

来检查是不是Ajax请求,在一些禁用Javascript的情况下可能会用到

10.Jquery和$的关系
在Jquery代码的最下面,可以看到下面的代码

window.jQuery = window.$ = jQuery;

$其实就是Jquery的一个shortcut

11.条件加载Jquery

<!-- Grab Google CDN jQuery. fall back to local if necessary -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="js/jquery-1.4.2.min.js"></script>')</script>

如果CDN没有下载到Jquery,则从本地读取

12.Jquery Filters

$('p:first').data('info', 'value'); // populates $'s data object to have something to work with
$.extend(
    jQuery.expr[":"], {
        block: function(elem) {
            return $(elem).css("display") === “block";
        },
        hasData : function(elem) {
            return !$.isEmptyObject( $(elem).data() );
        }
    }
);
$("p:hasData").text("has data"); // grabs paras that have data attached
$("p:block").text("are block level"); // grabs only paragraphs that have a display of “block"

注:$.expr[":"]等价于$.expr.filters

13.hover方法

$('#someElement').hover(function() {
    //在这里可以使用toggle方法来实现滑过和滑出的效果
});

14.传入属性对象
当创建一个元素的时候,Jquery1.4可以传入一个属性对象

$('', {
    id : 'someId',
    className : 'someClass',
    href : 'somePath.html'
});

甚至是Jquery指定的属性或事件如text, click

译:http://adamlu.com/?p=440
源:http://net.tutsplus.com/tutorials/javascript-ajax/14-helpful-jquery-tricks-notes-and-best-practices/

判断图片是否加载完成

最近在做一个相册功能过的时候,需要动态改变img的src地址,并且在图片加载完成后再加载对应的相片评论。需要用到的一个小功能,如下:

var objImagePreloader = new Image();
	objImagePreloader.onload = function() {
		$('#lightbox-image').attr('src','/demo.jpg');
		//do something
		objImagePreloader.onload=function(){};
	};
objImagePreloader.src = '/demo.jpg';