自己封装的一个JS分享组件

  因为工作的需求之前也封装过一个JS分享插件,集成了我们公司常用的几个分享平台。

  但是总感觉之前的结构上很不理想,样式,行为揉成一起,心里想的做的完美,实际上总是很多的偏差,所以这次我对其进行了改版。

  这次的核心就是:JS只负责事件+结构,也就是把功能实现出来,具体的外观样式,则使用者自己进行定义。

  以下是新版分享插件的代码:

  

  1 (function(root){
  2     ‘use strict‘;
  3     function share(params){
  4
  5         this.params = params;
  6         this.dom = params.dom;
  7         this.type = params.type || [];
  8         (this.dom && this.type && this.type.length)?this.custom() : this.defa();
  9
 10
 11     }
 12
 13     share.prototype.custom=function(){ //生成自定义的DOM结构
 14         var str = ‘‘;
 15         for(var i=0,l=this.type.length;i<l;i++){
 16             str+=‘<a href="javascript:;" shareType="‘+ this.type[i] +‘"></a>‘;
 17         }
 18         this.dom.innerHTML = str;
 19         this.bind();
 20     };
 21
 22     share.prototype.defa=function(){ //生成默认的DOM结构
 23         var str = ‘‘;
 24         this.type = [‘weibo‘,‘qqweibo‘,‘qq‘,‘qqzone‘,‘wx‘,‘rr‘,‘bdtb‘,‘db‘];
 25         for(var i=0,l=this.type.length;i<l;i++){
 26             str+=‘<a href="javascript:;" shareType="‘+ this.type[i] +‘">‘+this.type[i]+‘</a>‘;
 27         }
 28         this.dom.innerHTML = str;
 29         this.bind();
 30     };
 31
 32     share.prototype.bind=function(){    //给接口绑定事件
 33         var _this = this;
 34         this.dom.onclick=function(ev){
 35             var e = ev || window.event,
 36                 oTarget = e.target || e.srcElement;
 37             (oTarget.nodeName === ‘A‘ && _this.core(oTarget));
 38         }
 39         this.dom = null;
 40     }
 41
 42     share.prototype.core=function(o){
 43
 44         var _this = this,
 45             result = ‘‘,
 46             urls = ‘‘,
 47             title = ‘‘,
 48             desc = ‘‘,
 49             images = ‘‘,
 50             ercode = ‘‘;
 51
 52         function weibo(){
 53             result = ‘http://service.weibo.com/share/share.php?‘;
 54             urls = (_this.params.weibo && _this.params.weibo.url) ? _this.params.weibo.url : _this.params.url;
 55             title = (_this.params.weibo && _this.params.weibo.title) ? _this.params.weibo.title : _this.params.title;
 56             images = (_this.params.weibo && _this.params.weibo.images) ? _this.params.weibo.images : _this.params.images;
 57             result+= ‘title=‘ + encodeURIComponent(title)+‘&url=‘ + encodeURIComponent(urls) + ‘&pic=‘+ encodeURIComponent(images);
 58             window.open(result);
 59         }
 60         function qqweibo(){
 61             result = ‘http://share.v.t.qq.com/index.php?c=share&a=index‘;
 62             urls = (_this.params.qqweibo && _this.params.qqweibo.url) ? _this.params.qqweibo.url : _this.params.url;
 63             title = (_this.params.qqweibo && _this.params.qqweibo.title) ? _this.params.qqweibo.title : _this.params.title;
 64             images = (_this.params.qqweibo && _this.params.qqweibo.images) ? _this.params.qqweibo.images : _this.params.images;
 65             result+= ‘&title=‘ + encodeURIComponent(title)+‘&url=‘ + encodeURIComponent(urls) + ‘&pic=‘+ encodeURIComponent(images);
 66             window.open(result);
 67         }
 68         function qq(){
 69             var site = ‘‘,
 70                 summary = ‘‘;
 71             result = ‘http://connect.qq.com/widget/shareqq/index.html?‘;
 72             urls = (_this.params.qq && _this.params.qq.url) ? _this.params.qq.url : _this.params.url;
 73             site = (_this.params.qq && _this.params.qq.site) ? _this.params.qq.site : ‘‘;
 74             title = (_this.params.qq && _this.params.qq.title) ? _this.params.qq.title : _this.params.title;
 75             desc = (_this.params.qq && _this.params.qq.desc) ? _this.params.qq.desc : _this.params.desc;
 76             summary = (_this.params.qq && _this.params.qq.summary) ? _this.params.qq.summary : ‘‘;
 77             images = (_this.params.qq && _this.params.qq.images) ? _this.params.qq.images : _this.params.images;
 78             result+= ‘url=‘ + encodeURIComponent(urls)+‘&title=‘ + encodeURIComponent(title) +‘&desc=‘+ encodeURIComponent(desc) + ‘&summary=‘+encodeURIComponent(summary)+‘&pics=‘+ encodeURIComponent(images) +‘&site=‘+ encodeURIComponent(site);
 79             window.open(result);
 80         }
 81
 82         function qqzone(){
 83             var site = ‘‘,
 84                 summary = ‘‘;
 85             result = ‘http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?‘;
 86             urls = (_this.params.qqzone && _this.params.qqzone.url) ? _this.params.qqzone.url : _this.params.url;
 87             site = (_this.params.qqzone && _this.params.qqzone.site) ? _this.params.qqzone.site : ‘‘;
 88             title = (_this.params.qqzone && _this.params.qqzone.title) ? _this.params.qqzone.title : _this.params.title;
 89             desc = (_this.params.qqzone && _this.params.qqzone.desc) ? _this.params.qqzone.desc : _this.params.desc;
 90             summary = (_this.params.qqzone && _this.params.qqzone.summary) ? _this.params.qqzone.summary : ‘‘;
 91             images = (_this.params.qqzone && _this.params.qqzone.images) ? _this.params.qqzone.images : _this.params.images;
 92             result+= ‘url=‘ + encodeURIComponent(urls)+‘&title=‘ + encodeURIComponent(title) + ‘&desc=‘+ encodeURIComponent(desc) +‘&summary=‘+encodeURIComponent(summary) +‘&pic=‘+ encodeURIComponent(images) + ‘&site=‘+ encodeURIComponent(site);
 93             window.open(result);
 94         }
 95
 96         function rr(){
 97             result = ‘http://widget.renren.com/dialog/share?‘;
 98             urls = (_this.params.rr && _this.params.rr.url) ? _this.params.rr.url : _this.params.url;
 99             title = (_this.params.rr && _this.params.rr.title) ? _this.params.rr.title : _this.params.title;
100             images = (_this.params.rr && _this.params.rr.images) ? _this.params.rr.images : _this.params.images;
101             desc = (_this.params.rr && _this.params.rr.desc) ? _this.params.rr.desc : _this.params.desc;
102             result+= ‘resourceUrl=‘ +encodeURIComponent(urls)+‘&title=‘ + encodeURIComponent(title) + ‘&description=‘+ encodeURIComponent(desc) +‘&pic=‘+ encodeURIComponent(images);
103             window.open(result);
104         }
105         function bdtb(){
106             result = ‘http://tieba.baidu.com/f/commit/share/openShareApi?‘;
107             urls = (_this.params.bdtb && _this.params.bdtb.url) ? _this.params.bdtb.url : _this.params.url;
108             title = (_this.params.bdtb && _this.params.bdtb.title) ? _this.params.bdtb.title : _this.params.title;
109             desc = (_this.params.bdtb && _this.params.bdtb.desc) ? _this.params.bdtb.desc : _this.params.desc;
110             images = (_this.params.bdtb && _this.params.bdtb.images) ? _this.params.bdtb.images : _this.params.images;
111             result+= ‘title=‘ + encodeURIComponent(title)+‘&url=‘ + encodeURIComponent(urls) +‘&pic=‘+ encodeURIComponent(images)+‘&desc=‘+ encodeURIComponent(desc) ;
112             window.open(result);
113         }
114
115         function db(){
116             result = ‘http://shuo.douban.com/!service/share?‘;
117             urls = (_this.params.db && _this.params.db.url) ? _this.params.db.url : _this.params.url;
118             title = (_this.params.db && _this.params.db.title) ? _this.params.db.title : _this.params.title;
119             desc = (_this.params.db && _this.params.db.desc) ? _this.params.db.desc : _this.params.desc;
120             images = (_this.params.db && _this.params.db.images) ? _this.params.db.images : _this.params.images;
121             result+= ‘image=‘ + encodeURIComponent(images)+‘&href=‘ + encodeURIComponent(urls) +‘&name=‘+ encodeURIComponent(title)+‘&text=‘+ encodeURIComponent(desc) ;
122             window.open(result);
123         }
124
125         function wx(){
126             var e = document.getElementById(‘share_qrcode_box‘) || false,
127                 img = new Image(),
128                 _w = 0,
129                 _h = 0,
130                 oDiv = null;
131
132             img.onload=function(){
133                 _w = this.width;
134                 _h = this.height;
135
136                 oDiv = document.createElement(‘div‘);
137                 oDiv.className = ‘share_qrcode‘;
138                 oDiv.id = ‘share_qrcode_box‘;
139                 oDiv.innerHTML = ‘<img src="‘+ _this.params.qrcode +‘" /><span href="javascript:;" class="share_close">✕</span>‘;
140
141                 if(_this.params.target == ‘blank‘ && !e){
142                     oDiv.style.cssText = ‘position:fixed;_position:absolute;left:50%;top:50%;margin-left:‘+-(_w+20)/2+‘px;margin-top:‘+-(_h+20)/2+‘px;‘;
143                     document.body.appendChild(oDiv);
144                 }
145
146                 if(_this.params.target == ‘self‘ && !e){
147                     oDiv.style.cssText = ‘position:absolute;‘;
148                     _this.params.dom.cssText = ‘position:relative‘;
149                     _this.params.dom.appendChild(oDiv);
150                 }
151
152                 oDiv.children[1].style.cssText = "position:absolute;cursor:pointer;";
153                 oDiv.children[1].onclick=function(){
154                     var e = document.getElementById(‘share_qrcode_box‘);
155                     e && e.parentNode.removeChild(e);
156                 }
157                 oDiv.children[1] = null;
158
159             }
160
161             img.src=_this.params.qrcode;
162         }
163
164         switch(o.getAttribute(‘sharetype‘)){
165             case ‘weibo‘:weibo();break;
166             case ‘qqweibo‘:qqweibo();break;
167             case ‘qq‘:qq();break;
168             case ‘qqzone‘:qqzone();break;
169             case ‘rr‘:rr();break;
170             case ‘bdtb‘:bdtb();break;
171             case ‘db‘:db();break;
172             case ‘wx‘:wx();break;
173         }
174
175     }
176     root.share = function(params){
177         new share(params);
178     };
179 })(window);

使用方式如下:

 1 share({
 2         dom:document.getElementById(‘box‘), //指定结构生成的盒子。
 3         url:‘分享的url‘,
 4         title:‘分享的标题‘,
 5         desc:‘分享的描述‘,
 6         images:‘分享的图片url‘,
 7         qrcode:‘微信分享的二维码‘,
 8         target:‘blank‘,    //设置二维码的显示方式,blank窗口居中显示,selef,当前位置显示。
 9         qqzone:{ //单独配置qq空间的分享参数。
10             summary:‘这是一个摘要‘,
11             site:‘http://www.xxx.com‘
12         }
13     });
14 /* ============
15
16 参数是一个对象,具体的参数如下:
17
18     |-- dom [object]        :指定生成分享组件的dom对象。
19     |-- type [array]            :指定分享的类型。默认值为空数组,表示生成全部的分享类型。
20         |- weibo [string]      :分享到新浪微博。
21         |- qqweibo [string]    :分享到QQ微博。
22         |- qq [string]         :分享到QQ好友。
23         |- qqzone [string]     :分享到QQ空间。
24         |- wx [string]         :分享到微信中去。
25         |- rr [string]        :分享到人人网。
26         |- bdtb [string]    :分享到百度贴吧。
27         |- db [string]        :分享到豆瓣。
28     |-- url [string]             :通用的分享链接。
29     |-- title [string]        :通用的分享标题。
30     |-- desc [string]        :通用的分享描述。
31     |-- image [string]         :通用的分享图片。
32     |-- qrcode [string]         :设置微信的二维码。
33     |-- target [string]         :设置微信二维码的打开方式。
34         |- self            :当前位置显示。
35         |- blank            :弹出层打开。
36     |-- weibo [object]        :单独设置新浪微博分享的参数。
37         |- url             :单独设置新浪微博分享的url。
38         |- title            :单独设置新浪微博分享的标题。
39         |- images            :单独设置新浪微博分享的图片。
40      |-- qqweibo [object]    :单独设置QQ微博分享的参数。
41         |- url             :单独设置QQ微博分享的url。
42         |- title            :单独设置QQ微博分享的标题。
43         |- images            :单独设置QQ微博分享的图片。
44     |-- qq [object]            :单独设置QQ分享的参数。
45         |- url             :单独设置QQ分享的url。
46         |- title            :单独设置QQ分享的标题。
47         |- desc            :单独设置QQ分享的描述。
48         |- summary        :单独设置QQ分享的摘要。
49         |- site            :单独设置QQ分享的来源。
50         |- images            :单独设置QQ分享的图片。
51     |-- qqzone [object]        :单独设置QQ空间分享的参数。
52         |- url             :单独设置QQ空间分享的url。
53         |- title            :单独设置QQ空间分享的标题。
54         |- desc            :单独设置QQ空间分享的描述。
55         |- summary        :单独设置QQ空间分享的摘要。
56         |- site            :单独设置QQ空间分享的来源。
57         |- images            :单独设置QQ空间分享的图片。
58     |-- rr [object]            :单独设置人人分享的参数。
59         |- url             :单独设置人人分享的url。
60         |- title            :单独设置人人分享的标题。
61         |- desc            :单独设置人人分享的描述。
62         |- images            :单独设置人人分享的图片。
63     |--bdtb [object]        :单独设置百度贴吧分享的参数。
64         |- url             :单独设置百度贴吧分享的url。
65         |- title            :单独设置百度贴吧分享的标题。
66         |- desc            :单独设置百度贴吧分享的描述。
67         |- images            :单独设置百度贴吧分享的图片。
68     |--db [object]            :单独设置豆瓣分享的参数。
69         |- url             :单独设置豆瓣分享的url。
70         |- title            :单独设置豆瓣分享的标题。
71         |- desc            :单独设置豆瓣分享的描述。
72         |- images            :单独设置豆瓣分享的图片。
73
74 ==============*/
时间: 2024-10-09 19:36:38

自己封装的一个JS分享组件的相关文章

React自己写的一个地图小组件

由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只是一点点而已. 由于之前发了一次,说字数太少从主页移出了,作为一个铁头娃,那我肯定得重写啊.前一次发的不够细致,这次就薛微细一点好吧, 由于,由于,鱿鱼,说的我都饿了.不说了进入正题好吧, 首先说说主体思想,思想比较简单,去拿过来百度地图的API和bee-mobile,然后将两者结合到一起,形成新的

JS组件系列——封装自己的JS组件

前言:之前分享了那么多bootstrap组件的使用经验,这篇博主打算研究下JS组件的扩展和封装,我们来感受下JQuery为我们提供$.Extend的神奇,看看我们怎么自定义自己的组件,比如我们想扩展一个$("#id").MyJsControl({})做我们自己的组件,我们该如何去做呢,别急,我们慢慢来看看过程. 一.扩展已经存在的组件 1.需求背景 很多时候,我们使用jquery.ajax的方式向后台发送请求,型如 $.ajax({ type: "post", ur

JS组件系列——封装自己的JS组件,你也可以!

前言:之前分享了那么多bootstrap组件的使用经验,这篇博主打算研究下JS组件的扩展和封装,我们来感受下JQuery为我们提供$.Extend的神奇,看看我们怎么自定义自己的组件,比如我们想扩展一个$("#id").MyJsControl({})做我们自己的组件,我们该如何去做呢,别急,我们慢慢来看看过程. 一.扩展已经存在的组件 1.需求背景 很多时候,我们使用jquery.ajax的方式向后台发送请求,型如 $.ajax({ type: "post", ur

简单的JS运动封装实例---侧栏分享到

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <style> 7 #div1 {width: 100px; height: 200px; background: red;

使用原生JS实现一个风箱式的demo,并封装了一个运动框架

声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构.话不多说,现在开始改demo的制作. 首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的框架. 1 function getStyle(obj,attr) { 2 if(obj.currentStyle){ 3 return obj.currentStyle[attr];//为了获取IE下的属性值 4 }else{ 5 return window.getComputedStyle(ob

自己封装的一个LoadRes组件

这两周一直太忙,没有好好处理上上上周遇到的一个让我加班到凌晨的问题,这个问题是判断flash的加载. 之前的思路是让flash的人在制作flash的时候,加入了一个回调方法,该方法再会回调我页面的方法. 想象虽然很丰满,但是现实确很骨感,由于页面资源的加载顺序问题,如果flash是通过缓存读取得到的,那么flash便会先于我的脚本加载,这时便会出现flash调不到我定义的方法.但是由于功能的原因以及考虑页面的整洁性,我又不能将脚本放入到head中,最终的解决思路就是在head中加入一个scrip

简单模拟jQuery创建对象的方法,以及封装一个js动画框架

今天无事点开了N年未点开的慕课网,看了一个js动画框架的视频,心血来潮用jQuery的方法封装了一下,虽然不如jQuery,但是还是有点点所获. 什么都不说,直接上代码: /** * 这是框架的唯一对象,使用jQuery框架的创建方法 * @class MyAnimation * @constructor */ function MyAnimation(Selector){ //返回MyAnimation原型链中init()方法创建的对象 return new MyAnimation.proto

Vue.js说说组件

什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. 如何注册组件? 需要使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件.Vue.extend方法格式如下: var MyComponent = Vue.extend({ // 选项...后面再介绍 }) 如果想要其他地方使用这个创

为Node.js编写组件的几种方式

本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍使用v8 API跟使用swig框架的不同: (1)v8 API方式为官方提供的原生方法,功能强大而完善,缺点是需要熟悉v8 API,编写起来比较麻烦,是js强相关的,不容易支持其它脚本语言. (2)swig为第三方支持,一个强大的组件开发工具,支持为python.lua.js等多种常见脚本语言生成C++组件