1.addEventListener(String,Function,boolean)
当boolean为true就在捕获过程中执行,反之就在冒泡过程中执行处理函数。
2.观察者的使用场合就是:当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象需要改变的时候,就应该考虑使用观察者模式。
创建一个观察者对象
var observer = new Observer();
通过调用subscribe方法,实现一个事件的观察
observer.subscribe("任务名",处理函数)
通过publish触发观察事件,在任意时刻触发了这个观察的任务名,将会触发这个事件订阅subscribe方法
observer.publish("任务名")
取消事件订阅,意味着就不会执行了
observer.unsubscribe("任务名")
3. Promise 是一种令代码异步行为更加优雅的抽象
var dtd = $.Deferred(); //创建 dtd.resolve(); //成功 dtd.then() //执行回调
4.location.search 属性
Location 对象的 search 属性用于设置或取得当前 URL 的查询字串(? 符号及后面的部分),语法如下:
location.search = search
5.jquery下获取touch事件的pageX:event.originalEvent.targetTouches[0].pageX
6.微信分享自定义三种方式:
(1)在页面顶部放置一张大于300*300像素的图片,作为描述图,微信会自动抓取;
(2)加入如下代码;
var share_config = {
img_url: data.shareImage,
sharetitle: data.title,
sharedesc:data.desc,
link:location.href
};
document.addEventListener("WeixinJSBridgeReady", function onBridgeReady(){
// 发送给好友
WeixinJSBridge.on('menu:share:appmessage', function(argv){
WeixinJSBridge.invoke('sendAppMessage',{
"appid" : '',
"img_url" : share_config.img_url,
"img_width" : "640",
"img_height" : "640",
"link" : location.href,
"desc" : share_config.sharedesc,
"title" : share_config.sharetitle
}, function(res) { });
});
// 分享到朋友圈
WeixinJSBridge.on('menu:share:timeline', function(argv){
WeixinJSBridge.invoke('shareTimeline',{
"appid" : '',
"img_url" : share_config.img_url,
"img_width" : "640",
"img_height" : "640",
"link" : location.href,
"desc" : share_config.sharedesc,
"title" : share_config.sharetitle
}, function(res) { });
});
}, false);
(3)根据微信开发者平台,引入<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" ></script>
var WxJssdk = {
init:function(){
$.ajax({
url:'/x_getWeixinJssdk',
dataType:'jsonp',
data:{link:encodeURIComponent(location.href.split('#')[0])},
success:WxJssdk.callback
});
},
callback:function(data){
wx.config({
debug: false,
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage']
});
wx.ready(function(){
WxJssdk.shareTimeline();
WxJssdk.shareAppMessage();
});
},
shareTimeline:function(){
var title = videoTitle;
if(playmode ==3 && typeof(showTitle) != "undefined" && showTitle!=""){
title = showTitle;
}
if(pv>10000){
var num = Math.round(pv/10000);
title = '「'+num+'万小伙伴正在看」'+title;
}
wx.onMenuShareTimeline({
title: title,
link: location.href,
imgUrl: $("#weixinshare").attr("desktopIco") || 'http://static.youku.com/index/img/mobile/youkologo_300x300.png',
success: function () {Log.log(1,"tp=1&cp=4010832&cpp=1000962",1);},
cancel: function () {Log.log(1,"tp=1&cp=4010833&cpp=1000962",1);}
});
},
shareAppMessage:function(){
var desc = $("#weixinshare").html();
desc = desc.replace(/<\/?[^>]*>/g,'');
desc = desc.substring(0,100);
wx.onMenuShareAppMessage({
title: playmode == 3 && typeof(showTitle) != "undefined" && showTitle!="" ? showTitle : videoTitle,
desc: desc || '该视频来自「优酷」中国领先的视频网站,为您提供高清,流畅的视频体验',
link: location.href,
imgUrl: $("#weixinshare").attr("desktopIco") || 'http://static.youku.com/index/img/mobile/youkologo_300x300.png',
success: function () {Log.log(1,"tp=1&cp=4010830&cpp=1000962",1);},
cancel: function () {Log.log(1,"tp=1&cp=4010831&cpp=1000962",1);}
});
}
};
WxJssdk.init();
7.字符串作为 URI 进行编码
encodeURI() 函数:该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
encodeURIComponent() 函数:该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
区别在于后者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串),因此将转义用于分隔 URI 各个部分的标点符号。
escape() 函数:该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。不推荐使用。
8.获取服务器时间戳:
var timstamp = new Date().valueOf();
var systemTime = new Date($.ajax({url:"?t="+timstamp,async: false}).getResponseHeader("Date"));
return systemTime.valueOf();
9.获取本地时间戳
Date.parse(new Date()) //毫秒改成000显示
(new Date()).valueOf()等同于new Date().getTime() //ok
10.用js设置title或者meta值,需加下面代码才能生效
var $iframe = document.createElement("iframe");
$iframe.src="images/favicon.ico";
$iframe.style.display="none";
$iframe.onload = function(){
setTimeout(function() {
document.body.removeChild($iframe);
}, 0);
};
document.body.appendChild($iframe);