突然间 想学习下javascript
无奈很多代码看不懂 只能对着代码一句一句的调试
(function($){
$.fn.shareList = function(options){
//alert(options);
var opts;
var DATA_NAME = "shareList";
//返回API
if(typeof options == 'string'){
if(options == 'api'){
return $(this).data(DATA_NAME).interfaces[$(this).data(DATA_NAME).current];
}else if(options == 'interfaces'){
return $(this).data(DATA_NAME).interfaces;
}
}
else{
var options = options || {};
//覆盖参数
opts = $.extend(true,{},$.fn.shareList.defaults,options);
if(options.shareSites) opts.shareSites = options.shareSites;
}
return this.each(function(){
//调用方法
if(typeof options == 'string'){
}
//创建
else{
/* test opts of value */
for( var i in opts)
{
ADS.log.write(i);
}
var _shareList = new yijs.ShareList(opts);
_shareList.$applyTo = $(this);
//alert(_shareList.$applyTo.constructor);
//alert(_shareList.$applyTo instanceof jQuery);
_shareList.render();
$(this).data(DATA_NAME,_shareList);
}
})
}
var yijs = yijs || {};
yijs.ShareList = function(options){
this.options = $.extend($.fn.shareList.defaults,options);
this.effect = this.options.effect;
//组件所起作用的对象
this.$applyTo = options.applyTo && $(options.applyTo) || null;
//alert(this.$applyTo);
this.$li = null;
this.width = 0;
this.liWidth = 0;
this.tpl = this.options.tpl;
this.getListAjaxOptions = this.options.getListAjaxOptions;
this.pageUrl = encodeURIComponent(window.location.href);
this.pageTitle = encodeURIComponent(document.title.substring(0,76));
if($.browser.msie&&($.browser.version == "6.0")&&!$.support.style) this.options.showShadow = false;
}
yijs.ShareList.prototype = {
/**
* 运行
*/
render : function(){
var _that = this;
/* test this object alert(_that instanceof yijs.ShareList); return true */
var _cls = this.options.cls;
/* for(var i in _cls){ADS.log.write(i);} */
/* alert(this.$applyTo.size()); */
/* alert(this.$applyTo instanceof jQuery); return true */
/* ADS.log.write(_cls.shareList); ruturn share-list */
//ADS.log.write(this.options.style);
/* alert(this.options.style); return null */
if(this.$applyTo != null && this.$applyTo.size() > 0){
this.$applyTo.html("<ul class='"+_cls.shareList+" clearfix'></ul>");
this.$applyTo.css({"position":"relative","overflow":"hidden"});
this.options.style && this.$applyTo.css(this.options.style);
this.$applyTo = this.$applyTo.children("."+_cls.shareList);
/* for(var i in this.$applyTo){ADS.log.write(i);} */
/* ADS.log.write(this.$applyTo.selector); return .children(.share-list) */
/* ADS.log.write(this.getListAjaxOptions.url); return js/shareListData.js */
/* ADS.log.write(this.getListAjaxOptions.type); return get */
/* ADS.log.write(this.getListAjaxOptions.dataType); return json */
$.ajax({
url : this.getListAjaxOptions.url,
type : this.getListAjaxOptions.type,
dataType : this.getListAjaxOptions.dataType,
success : function(data){
/*for( var i in data){for(var j in data[i]){ADS.log.write(j);}} test data return value */
_that._getListSuccess(data);
},
beforeSend : function(){
_that._getListBeforeSend();
}
});
}
},
/**
* 成功获取分享列表后执行的回调函数
* @param {Object} data json数据源
*/
_getListSuccess : function(data){
var _that = this;
var _cls = this.options.cls;
_that._createList(data,function(){
//alert(this);
_that.$li = _that.$applyTo.children("li");
//alert(_that.options.showShadow);
_that.options.showShadow && _that.$li.children("."+_cls.text).hide();
_that._setLocalBookmark();
_that._addShadow();
_that._setUlWidth();
_that._followMouseScroll();
//鼠标滑过li
_that.$li.hover(function(){
var index = $(this).index();
_that.iconToTop(index);
},function(){
var index = $(this).index();
_that.iconTopDefault(index);
})
_that.getListAjaxOptions.success && _that.getListAjaxOptions.success.call(this,data);
});
},
/**
* 触发ajax请求前的回调函数
*/
_getListBeforeSend : function(){
/* ADS.log.write(this.options.preloadImgSrc); return style/images/loading.gif */
/* alert(this.getListAjaxOptions.beforeSend); */
//alert(this instanceof yijs.ShareList) call(this) 'this' is yijs.ShareList object in the getListAjaxOptions.beforeSend
this.$applyTo.html("<img src='"+this.options.preloadImgSrc+"' class='"+this.options.cls.preload+"' />");
this.getListAjaxOptions.beforeSend && this.getListAjaxOptions.beforeSend.call(this);
},
/**
* 创建分享按钮列表
* @param {Object} data json数据源
* @param {function} afterCreate 回调函数
*/
_createList : function(data,afterCreate){
var _that = this;
var _li;
var _list = _that.options.shareSites;
/* for(var i in _list){ADS.log.write(_list[i]);} */
var _ali = [];
/* ADS.log.write(this.tpl); return string */
$.each(_list,function(a){
$.each(data,function(i){
if(data[i].name == _list[a]){
_li = _that.tpl.TFtpl(data[i]);
//ADS.log.write(_li);
_li = _li.TFtpl({url:_that.pageUrl,title:_that.pageTitle});
//ADS.log.write(_li);
_ali.push(_li);
} ;
})
})
_that.$applyTo.children().fadeOut("slow",function(){
_that.$applyTo.html(_ali.join(""));
//alert(this instanceof yijs.ShareList); return false
//alert(this instanceof jQuery); return false
//alert($(this) instanceof jQuery); return true
afterCreate && afterCreate.call(this);
})
},
/**
* 给本地收藏夹按钮绑定特殊事件
*/
_setLocalBookmark : function(){
var _that = this;
this.$li.children("."+this.options.cls.icon+"[name=favorite]").click(function(){
_addBookmark(window.location.href,document.title.substring(0,76));
return false;
}).next().click(function(){return false});
//添加到本地收藏夹
function _addBookmark(url,title) {
if (window.sidebar) {
window.sidebar.addPanel(title,url,"");
}
else if(document.all) {
window.external.AddFavorite( url, title);
}
else if( window.opera && window.print ) {
return true;
}
}
},
/**
* 给每个图标下加个阴影图片
*/
_addShadow : function(){
var _opt = this.options;
/* for(var i in _opt){ADS.log.write(i);} return default */
/* _opt.showShadow reutrn true */
if(_opt.showShadow){
//ADS.log.write(_opt.cls.iconShadow);
//ADS.log.write(_opt.shadowSrc); return style/images/icon-shadow.png
$("<div class='"+_opt.cls.iconShadow+"'><img src='"+_opt.shadowSrc+"' /></div>").appendTo(this.$li);
}
},
/**
* 设置列表宽度
*/
_setUlWidth : function(){
var _$liFirst = this.$li.eq(0);
/* for(var i in this.$li){for(var j in this.$li[i]){ ADS.log.write(j);}} */
//alert(this.$li.eq(0).selector);
//alert(_$liFirst.width());
//var w = _$liFirst.width();
/* ADS.log.write(w); */
/* ADS.log.write(_$liFirst.css("marginLeft")); */
/* ADS.log.write(_$liFirst.css("marginRight")); */
this.liWidth = _$liFirst.width()+parseInt(_$liFirst.css("marginLeft"))+parseInt(_$liFirst.css("marginRight"));
// alert(this.liWidth); return 66
// alert(this.$li.size()); return 19
this.$applyTo.width(this.liWidth * this.$li.size());
this.width = this.$applyTo.width();
},
/**
* 列表随鼠标滚动
*/
_followMouseScroll : function(){
var _that = this;
var _opts = this.options;
var _parentWidth = this.$applyTo.parent().width();
// alert(_parentWidth); return 660
// alert(this.width); return 1254
var _totScroll = this.width-_parentWidth;
if(this.width > _parentWidth){
this.$applyTo.mousemove(function(e){
//ADS.log.write(e.pageX);
//alert(e.pageX);
//alert(e.clientX);
if(_opts.allowSroll){
var _pageX = e.pageX;
var _pos = _that.$applyTo.offset();
_that.$applyTo.css({marginLeft:'-'+_totScroll*(Math.max(_pageX-_pos.left,0)/_that.width)+'px'});
}
})
this.$applyTo.mouseleave(function(e){
if(!jQuery.browser.msie || jQuery.browser.version != "7.0"){
var _marginLeft = Math.abs(Math.floor(parseInt(_that.$applyTo.css("marginLeft"))));
var _is = _marginLeft % _that.liWidth;
if (_is != 0) {
var _d = Math.floor(_marginLeft / _that.liWidth);
_that.$applyTo.animate({"marginLeft": "-"+_d * _that.liWidth},"fast")
}
}
})
}
},
/**
* 鼠标滑过时图标向上移动,阴影发生变化
*/
iconToTop : function(index){
var _that = this;
var _lihoverEffect = _that.effect.liHover;
var _speed = this.options.speed;
var _$currentLi = this.$li.eq(index);
var _icon_cls = this.options.cls.icon;
if(_$currentLi.size() > 0){
_$currentLi.children("."+_icon_cls).stop().animate(_lihoverEffect.icon,_speed,function() {
$(this).animate(_lihoverEffect.iconBack,_speed);
});
//改变阴影大小和透明度
if(this.options.showShadow){
var _$shadowDiv = _$currentLi.children("."+this.options.cls.iconShadow);
_$shadowDiv.children("img").stop().animate(_lihoverEffect.shadowImg,_speed);
_$shadowDiv.stop().animate(_lihoverEffect.shadowDiv,_speed);
}
}
},
/**
* 鼠标离开时图标复位,阴影复位
*/
iconTopDefault : function(index){
var _that = this;
var _liMouseoutEffect = _that.effect.liMouseout;
var _speed = this.options.speed;
var _$currentLi = this.$li.eq(index);
var _icon_cls = this.options.cls.icon;
if (_$currentLi.size() > 0) {
_$currentLi.children("."+_icon_cls).stop().animate(_liMouseoutEffect.icon, _speed, function() {
$(this).animate(_liMouseoutEffect.iconBack, _speed);
});
//复位阴影大小和透明度
if(this.options.showShadow){
var _$shadowDiv = _$currentLi.children("."+this.options.cls.iconShadow);
_$shadowDiv.children("img").stop().animate(_liMouseoutEffect.shadowImg,_speed);
_$shadowDiv.stop().animate(_liMouseoutEffect.shadowDiv,_speed);
}
}
}
}
//接口数组
$.fn.shareList.interfaces = [];
//样式
$.fn.shareList.classes = {
defaults : {
shareList : "share-list",
shareListLi : "share-list-li",
icon : "share-list-icon",
text : "share-list-text",
iconShadow : "share-list-icon-shadow",
preload : "share-list-preload"
}
}
//模板
$.fn.shareList.tpl = {
defaults : '<li class="l share-list-li">'+
'<a href="{href}" name="{name}" localName="{localName}" class="share-list-icon icon-{name}" target="_blank"></a>'+
'<a href="{href}" class="share-list-text">{localName}</a>'+
'</li> '
}
//默认参数
$.fn.shareList.defaults = {
/**想要显示的按钮列表*/
shareSites : ["9dian","feerbook","chouti","diglog","sinaminiblog","renren","zhuaxia","xianguo","greader","qqshuqian",
"douban","twitter","favorite","kaixin001","baiducang","gbuzz","digu","zuosa",
"renjian","sohubai"],
/**ajax配置*/
getListAjaxOptions : {
type: "GET",
url : "js/shareListData.js",
dataType : "json",
beforeSend:function(){}
},
/**是否允许列表随鼠标滚动*/
allowSroll : true,
/**是否显示阴影*/
showShadow : true,
/**阴影图片路径*/
shadowSrc : "style/images/icon-shadow.png",
/**预加载动画图片*/
preloadImgSrc : "style/images/loading.gif",
/**动画速度*/
speed : 250,
/**样式*/
style : null,
/**动画效果设置*/
effect : {
/**鼠标滑过li时的动画*/
liHover : {
icon : {marginTop: "-10px"},
iconBack : {marginTop: "-6px"},
shadowImg : { width: "65%", height: "10px", marginLeft: "10px"},
shadowDiv : {opacity: 0.25}
},
/**鼠标离开li时的动画*/
liMouseout : {
icon : {marginTop: "4px"},
iconBack : { marginTop: "0px" },
shadowImg : { width: "100%", height: "21px", marginLeft: "0"},
shadowDiv : {opacity: 1}
}
},
/**样式名集合*/
cls : $.fn.shareList.classes.defaults,
/**模板*/
tpl : $.fn.shareList.tpl.defaults
};
})(jQuery);
//简单的转换模板函数
String.prototype.TFtpl = function(o){
return this.replace(/{([^{}]*)}/g,
function (a,b){
var r = o[b];
return typeof r==='string'?r:a;
}
);
};
分享到:
相关推荐
- **插件扩展**:ShareList拥有丰富的插件生态系统,允许用户根据自己的需求安装插件,增强软件功能,如文件预览、加密、同步等。 2. **技术栈与开发语言** - **JavaScript**:作为主要开发语言,JavaScript使得...
在IT行业中,"ShareList"很可能是一个项目或应用的名称,尤其考虑到它被标记为"Java",我们可以推测这是一个使用Java编程语言实现的共享列表或者文件分享系统。在这个系统中,用户可以创建、管理和分享列表,可能...
标题“sharelist-heroku”指的是一个项目,它允许用户快速地将某个应用部署到Heroku平台上。Heroku是一个流行的云平台,它支持多种编程语言,包括Python、Ruby、Node.js等,使得开发者可以轻松地托管和管理他们的Web...
ShareList ShareList 是一个易用的网盘工具,支持快速挂载 GoogleDrive、OneDrive ,可通过插件扩展功能。 文档 许可 Copyright (c) 2018-present, Reruin
共享列表的SMB 该lib基于 。
在写了内核链表后,写了这段代码,以便自己和他人易于理解和使用链表。
此外,它还支持通过插件进行功能扩展,这意味着用户可以根据自己的需求安装额外的模块或组件,以增强ShareList的功能,比如添加对其他云服务的支持、增加文件管理功能等。 “许可 Reruin版权所有(c)2018年至今”...
#### 5.6 分析错误及创建报告文件ShareList - **内容**:分析错误,并生成报告文件。 #### 5.7 3D VRML模拟装配 - **内容**:使用3D VRML技术进行装配模拟。 ### 五、PLM建库 #### 6.1 定义新的Vendor(厂商) - ...
让我们深入探讨这两个主题,并通过分析`sharelist.c`源码来理解它们在实际操作中的应用。 **内核同步** 内核同步是为了防止多个处理器或线程在同一时间访问共享资源,导致数据不一致或错误。Linux 2.6内核提供了...
操作系统中的“生产者-消费者问题”是一个经典的并发编程问题,主要涉及进程或线程的同步与互斥。在这个问题中,生产者...此外,还能提升软件开发、调试技巧,培养团队协作精神和创新能力,以及算法设计和分析能力。
在本实验中,`synchronized`用于锁定`shareList`,防止生产者和消费者同时访问。`wait()`方法使当前线程进入等待状态,释放锁,直到被其他线程唤醒。`notify()`则用来唤醒一个等待的线程,通常是在资源可用时调用。 ...
至于提供的压缩包子文件的文件名列表,这些ASP文件可能是某个网站或应用程序的一部分,涉及用户管理(如Register.asp和User_Left.asp)、文件共享(如MyShareFiles.asp和ShareList.asp)、收藏夹(Favorites.asp)、...
通过`synchronized`关键字保证了对共享资源`shareList`的互斥访问,`wait()`和`notify()`方法用于线程间通信,控制生产者和消费者的执行顺序。 总结来说,生产者与消费者问题是操作系统中典型的同步问题,通过使用...
1. **构建ListView布局**:首先,你需要创建一个包含ListView的布局文件,如`sharelist.xml`,定义ListView的各项属性和子元素。 2. **填充数据**:创建一个List,将每个ListView项的数据(如字符串、图片等)放入...
[ShareSDK showShareActionSheet:self shareList:shareList content:publishContent statusBarTips:YES oneKeyShareList:[NSArray defaultOneKeyShareList] shareViewStyle:style shareViewTitle:@"内容分享" result...
5. **ShareList.asp**:展示所有公开或特定用户可访问的共享文件列表,ASP在这里处理文件共享的逻辑,包括权限控制和文件搜索功能。 6. **GetFile.asp**:用户通过点击链接下载文件,这个页面负责处理文件的下载...