整理简易分享功能

在做一个新项目时,需要一个新浪和微信的分享功能,起初看到这个需求,感觉没有什么,直接使用第三方比较成熟的分享组件就可以的,比如:jiathis、百度分享组件,这些都可以很轻松并且方便的完成所需要的分享任务。一般情况下,在介绍这么多之后,总要有一个但是。这次也不例外,考虑到某种原因,公司不能使用第三方的分享组件,此时就有了我现在的做的事情。做一个比较基础的分享功能,并且只提供了四新浪微博、腾讯微博、腾讯空间、微信、人人的分享功能,实现特别简单,这里只做整理。

说明:

  • 原生JS实现,可以任何框架完美结合使用
  • 页面分享样式可自定义展示
  • 自定义参数内容
  • 支持弹窗和新标签页两种形式
  • 可以很方便的进行新分享方式的扩展

源码实现:

/**
 * 简易分享功能
 * author: 黑MAO
 * 2014年10月21日
 * 由于个开放平台参数不一致,这里提出比较有用的四个参数,并加以说明
 * 其他字段由于不是公共生效,使用的时候自行查阅资料
 * {
		url: ‘‘, //显示的分享链接
		title: ‘‘, //显示的分享说明
		description: ‘‘, //该参数不能公用的,只有空间和人人有效
		pic: ‘‘,    //需要显示的展示图片
	}
 */
(function() {
	/**
	 * 分享构造函数
	 * @param {String} type [‘pop‘, ‘tab‘]
	 * @constructor
	 */
	function Share(type) {
		this.type = type || "pop";
	}
	window.Share = Share;

	var optionsCache = {};

	Share.prototype = {
		sina: function(opts) {
			opts = opts || {};
			optionsCache = {
				url: opts.url || location.href,
				appkey: opts.appkey || ‘‘, /**您申请的应用appkey,显示分享来源(可选)*/
				title: opts.title || document.title,
				pic: opts.pic || ‘‘, /**分享图片的路径(可选)*/
				ralateUid: opts.uid || ‘‘, /**关联用户的UID,分享微博会@该用户(可选)*/
				rnd:+new Date()
			}
			var temp = [];
			for( var k in optionsCache ){
				temp.push(k + ‘=‘ + encodeURIComponent( optionsCache[k] || ‘‘ ) )
			}
			var url = ‘http://service.weibo.com/share/share.php?‘ + temp.join(‘&‘);
			this.open(url, this.type);
		},

		renren: function(opts) {
			opts = opts || {};
			optionsCache = {
				resourceUrl: opts.url || location.href,
				api_key: opts.appkey || ‘‘,
				title: opts.title || document.title,
				pic: opts.pic || ‘‘,
				description: opts.description,
				charset: opts.charset,
				rnd:+new Date()
			}
			var temp = [];
			for( var k in optionsCache ){
				temp.push(k + ‘=‘ + encodeURIComponent( optionsCache[k] || ‘‘ ) )
			}
			var url = ‘http://widget.renren.com/dialog/share?‘ + temp.join(‘&‘);
			this.open(url, this.type);
		},

		qzone: function(opts) {
			opts = opts || {};
			optionsCache = {
				url: opts.url || location.href,
				title: opts.title || document.title,
				pics: opts.pic || ‘‘,
				desc: opts.description,
				rnd:+new Date()
			}
			var temp = [];
			for( var k in optionsCache ){
				temp.push(k + ‘=‘ + encodeURIComponent( optionsCache[k] || ‘‘ ) )
			}
			var url = ‘http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?‘ + temp.join(‘&‘);
			this.open(url, this.type);
		},

		tecent: function(opts) {
			opts = opts || {};
			optionsCache = {
				url: opts.url || location.href,
				appkey: opts.appkey,
				title: opts.title || document.title,
				pic: opts.pic || ‘‘,
				desc: opts.description,
				rnd:+new Date()
			}
			var temp = [];
			for( var k in optionsCache ){
				temp.push(k + ‘=‘ + encodeURIComponent( optionsCache[k] || ‘‘ ) )
			}
			var url = ‘http://share.v.t.qq.com/index.php?c=share&a=index&‘ + temp.join(‘&‘);
			this.open(url, this.type);
		},

		weixin: function(url, callback) {
			if(typeof url === "function") {
				callback = url;
				url = ‘http://s.jiathis.com/qrcode.php?url=‘+decodeURIComponent(location.href);
			}else {
				url = ‘http://s.jiathis.com/qrcode.php?url=‘+decodeURIComponent(url);
			}
			callback && callback(url);
		},

		/**
		 * 打开新窗口或新标签
		 * @param url 开启地址
		 * @param type 开启类型
		 */
		open: function(url, type) {
			var params = ‘‘;
			var windowWidth = window.innerWidth || document.body.clientWidth;
			var windowHeight = window.innerHeight || document.body.clientHeight;
			var width = Math.floor((windowWidth - 875)/2);
			var height = Math.floor((windowHeight - 645)/2);
			if(type == "pop") {
				params = ‘width=875, height=645, top=‘+height+‘, left=‘+width+‘, toolbar=no, menubar=no, scrollbars=no, location=yes, resizable=no, status=no‘;
			}
			window.open(url,‘‘, params);
		}
	}
})();

  使用方法:

<ul class="share">
    <li><a href="#" data-type="sina">新浪微博</a></li>
    <li><a href="#" data-type="tecent">腾讯微博</a></li>
    <li><a href="" data-type="qzone">QQ空间</a></li>
    <li><a href="#" data-type="renren">人人</a></li>
    <li><a href="#" data-type="weixin">微信</a></li>
</ul>
<div id="qrcode-div"></div>

//分享
    var share = new Share();
    $(‘.share‘).find(‘a‘).on(‘click‘, function(e) {
        e.preventDefault();
        var opts = {
            url: ‘http://www.so.com‘,
            title: ‘自定义的title‘,
            description: ‘自定义描述‘,
            pic: ‘http://quc.qhimg.com/dm/100_100_100/t010fa3a46e8f98da93.jpg‘
        };
        var type = $(this).data(‘type‘);
        switch(type) {
            case ‘sina‘:
                share.sina(opts);
                break;
            case ‘renren‘:
                share.renren(opts);
                break;
            case ‘qzone‘:
                share.qzone(opts);
                break;
            case ‘tecent‘:
                share.tecent(opts)
                break;
            case ‘weixin‘:
                share.weixin(function(url) {
                    $(‘#qrcode-div‘).html(‘<img src="‘+url+‘" height=150 width=150>‘);
                });
                break;
            default:
                alert(type);
        }
    });

  

例子展示:http://cnblogs.sinaapp.com/demo/share.html

时间: 2024-12-18 00:20:01

整理简易分享功能的相关文章

简易分享功能(非第三方)

在做一个新项目时,需要一个新浪和微信的分享功能,起初看到这个需求,感觉没有什么,直接使用第三方比较成熟的分享组件就可以的,比如:jiathis.百度分享组件,这些都可以很轻松并且方便的完成所需要的分享任务.一般情况下,在介绍这么多之后,总要有一个但是.这次也不例外,考虑到某种原因,公司不能使用第三方的分享组件,此时就有了我现在的做的事情.做一个比较基础的分享功能,并且只提供了四新浪微博.腾讯微博.腾讯空间.微信.人人的分享功能,实现特别简单,这里只做整理. 说明: 原生JS实现,可以任何框架完美

微信sdk分享功能详解

这两天项目需求,需要做分享功能.这块之前是用shareSdk实现的,现在发现有些局限,计划用原生的微信官方提供的sdk来做. 因此,这篇文章主要是做一个整理和总结,供自己备忘和大家参考. 1.申请你的AppID 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,只有审核通过的应用才能进行开发. 2.下载微信终端开发工具包并导入 开发工具包主要包含3部分内容:(其中,只有libammsdk.jar是必须的) - libammsdk.jar(每个第三方应用必须要导入

调用微信聊天功能和分享功能

今天整理个不是问题的问题,没学到啥,主要完成功能: 老大要求能调用手机号码然后通过微信聊, 我去,说白了老大看到了应用-通讯录plus-的微信功能,要我模仿. 首先,坑啊,我以为是开放的功能,就去看了半天微信的开发分享功能,记录下分享功能的使用: 1.去下载微信开放平台的包: 微信提供了 开发的工具包sdk ,里面有个 libammsdk.jar.将它导入工程 2.去微信开放平台申请你的 APP_ID ,做过其他开放平台的都应该知道这玩意. 3.在工程建立静态变量APP_ID: public s

Android分享---调用系统自带的分享功能

以前我们总想到友盟等平台分享功能的集成,集成这玩意还得下载对应的jar包.当然,用这些平台的分享并不是说什么好处都没有,至少人家的统计功能还是很实用的.不过有的时候我们是不需要多余功能的,只需要能分享就行,那我们就可以直接用Andriod系统自带有分享功能去完成了.下面我来介绍如何实现系统的分享功能: 分享文本信息 1 Intent intent = new Intent(Intent.ACTION_SEND); 2 intent.setType("text/plain"); 3 in

在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)

最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,ShareSDK官网的文档比较分散,而且关于Unity的文档比较简略,所以还是有不少的坑.写篇博客分享一下,并加强理解记忆. 第一步,先去ShareSDK的官网下载最新版本的ShareSDK(完全免费).地址:http://www.mob.com/ 我们选择ShareSDK For Unity3D,页面会直

Web 项目中分享到微博、QQ空间等分享功能

网上有很多的模板以及代码,但是有很多都不能分享内容,简单的测试了下: 以新浪微博为例,文本框中的内容是title属性,下面的链接是url属性,如果你的链接页面有图片,会自动抓取图片让你选择,因此,当你自己写分享功能时需要你传递title和url属性到接口链接即可. 代码如下: 1 <script> 2 function buttonShare(url){ 3 $("#theForm").attr("action",url); 4 $("#the

在Android中如何实现分享功能

Android应用中能很方便的完成这些功能,很多的应用中都有"分享"功能?如何分享呢?下面给大家说说看.最近有人问到Android分享功能用那个比较好,使用Android开发自带的Intent来进行分享还是借助第三方呢,直接上代码: 一.使用Intent直接和第三方应用进行通信: /** * 分享功能 * * @param context *            上下文 * @param activityTitle *            Activity的名字 * @param

实现邮件分享功能

private void sendMail(){ Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_SUBJECT,"邮件标题"); intent.putExtra(Intent.EXTRA_TEXT, "邮件正文内容" + "\n"+"分享自--

微信的分享功能(针对web手机站页面进行的分享功能)

把这段js粘贴进,设置可以分享的页面,当微信打开,即可微信进行分享各个圈 $(function(){ var lujing=$("#logimg").attr("src");  //分享中带有的图片 var url=window.location.href;         //分享页的地址 var title=document.title;             //分享内容的标题 weixin("http://m.e-iot.com/images/b