html按钮分享功能实现,一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)...

前几天由于工作需要制作一个分享按钮,考虑到后续其他项目可能也会用到,于是就打算写成插件化,正好也给我自己的插件jquery.hooray增加一个新的功能,为了不浪费大家时间,我先把demo放出来,如果觉得能用到,或者想学是怎么制作的,那就继续往下看。(demo演示)

既然要做成插件,那可制定性肯定要强,不能定死,比如不能把显示个数定死,不能把分享按钮排序定死等等(不过有些东西还是要定死的,太灵活了也就成不了插件了)。这里我的操作办法是……先看代码吧

我把所有按钮都用A标记来制作,然后用一个div容器把它们都包在里面,只要在这个容器里,用的是A标记,并且class的名称是按我的规定来命名的就一切OK,至于显示数量,排列顺序什么的,随意。

HTML制定好规范后,就可以开始写css样式了,需要注意的是,为了减少http的请求,按钮的图片我是用css sprites拼接在一起了,如

20110919003620928.jpg

同时我也制作了32*32的大图标版本,当然你也可以制作其他尺寸的,按个人需求来就行。下面是css代码,没有太多好介绍的,看下就行。

.hr-share-16 a{display:block;width:18px;height:16px;background:url(HRico_16x16.png) no-repeat;float:left;cursor:pointer}

.hr-share-16 a:hover{opacity:0.8}

.hr-share-16 a.hr-share-more{background-position:0 0}

.hr-share-16 a.hr-share-tsina{background-position:0 -16px}

.hr-share-16 a.hr-share-tqq{background-position:0 -32px}

.hr-share-16 a.hr-share-qzone{background-position:0 -48px}

.hr-share-16 a.hr-share-renren{background-position:0 -64px}

.hr-share-16 a.hr-share-baidu{background-position:0 -80px}

.hr-share-16 a.hr-share-115{background-position:0 -96px}

.hr-share-16 a.hr-share-tsohu{background-position:0 -112px}

.hr-share-16 a.hr-share-taobao{background-position:0 -128px}

.hr-share-16 a.hr-share-xiaoyou{background-position:0 -144px}

.hr-share-16 a.hr-share-hi{background-position:0 -160px}

.hr-share-16 a.hr-share-fanfou{background-position:0 -176px}

.hr-share-16 a.hr-share-sohubai{background-position:0 -192px}

.hr-share-16 a.hr-share-feixin{background-position:0 -208px}

.hr-share-16 a.hr-share-youshi{background-position:0 -224px}

.hr-share-16 a.hr-share-tianya{background-position:0 -240px}

.hr-share-16 a.hr-share-msn{background-position:0 -256px}

.hr-share-16 a.hr-share-douban{background-position:0 -272px}

.hr-share-16 a.hr-share-twangyi{background-position:0 -288px}

.hr-share-16 a.hr-share-mop{background-position:0 -304px}

这里我特地为每个按钮的样式加了个.hr-share-16这个前缀,目的一是为了区分出16*16和32*32的图标样式,二是为了之后js代码部分的操作,后面我会讲到。

做完了上面这两步,接下来重点就来了,就是JS的编写,在此之前,我们先把思路理一下,防止在编写完JS后发现有更好的方法,导致重新编写。

首先,每个网站都有自己特定分享链接的代码,我们随机拿2个过来参考下,比如最近很火的腾讯微博和新浪微博。

view sourceprint?http://v.t.qq.com/share/share.php?title=分享插件 - jquery.HooRay - jQuery插件 - 制作:胡尐睿丶&url=http://saw.caifutang.com/jquery.hooray/HRshare.html&appkey=118cd1d635c44eab9a4840b2fbf8b0fb

view sourceprint?http://service.weibo.com/share/share.php?title=分享插件 - jquery.HooRay - jQuery插件 - 制作:胡尐睿丶&url=http://saw.caifutang.com/jquery.hooray/HRshare.html&source=bookmark&appkey=2992571369

发现没有?对,就是一般的分享链接只需要两个参数就行,一是页面的标题,另一个就是页面的链接,至于腾讯微博和新浪微博都需要一个appkey,这个另外再说,如果没有,直接用我提供的这个就行,因为appkey需要去申请,过程略微有点麻烦。

接下来,如果掌握了这个,操作起来就简单了,我们只需要对每个按钮绑定一个点击事件,然后调转到制定的链接,就一切OK了。但是如果手动一个个去绑定,那感觉就很麻烦了,而且如果增加一个新的分享,改动的代码量似乎也有点大,而且代码行数也多。所以,绑定按钮事件我是通过循环绑定的。下面就来看下部分代码片段吧。

首先我定义了这么两个数组(tab键的缩进在这里不起作用了,大家凑合着看吧):

var shareico = {

"tqq" :"http://v.t.qq.com/share/share.php?title={title}&url={url}&appkey=118cd1d635c44eab9a4840b2fbf8b0fb",

"tsina" :"http://service.weibo.com/share/share.php?title={title}&url={url}&source=bookmark&appkey=2992571369",

"qzone" :"http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={url}&title={title}",

"renren" :"http://share.renren.com/share/buttonshare.do?link={url}&title={title}",

"baidu" :"http://cang.baidu.com/do/add?it={title}&iu={url}&fr=ien#nw=1",

"115" :"http://sc.115.com/add?url={url}&title={title}",

"tsohu" :"http://t.sohu.com/third/post.jsp?url={url}&title={title}&content=utf-8",

"taobao" :"http://share.jianghu.taobao.com/share/addShare.htm?url={url}",

"xiaoyou" :"http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?to=pengyou&url={url}",

"hi" :"http://apps.hi.baidu.com/share/?url={url}&title={title}",

"fanfou" :"http://fanfou.com/sharer?u={url}&t={title}",

"sohubai" :"http://bai.sohu.com/share/blank/add.do?link={url}",

"feixin" :"http://space3.feixin.10086.cn/api/share?title={title}&url={url}",

"youshi" :"http://www.ushi.cn/feedShare/feedShare!sharetomicroblog.jhtml?type=button&loginflag=share&title={title}&url={url}",

"tianya" :"http://share.tianya.cn/openapp/restpage/activity/appendDiv.jsp?app_id=jiathis&ccTitle={title}&ccUrl={url}&jtss=tianya&ccBody=",

"msn" :"http://profile.live.com/P.mvc#!/badge?url={url}&screenshot=",

"douban" :"http://shuo.douban.com/!service/share?image=&href={url}&name={title}",

"twangyi" :"http://t.163.com/article/user/checkLogin.do?source={title}&info={title}+{url}&images=",

"mop" :"http://tk.mop.com/api/post.htm?url={url}&title={title}"

};

var shareiconame = {

"tqq" :"腾讯微博",

"tsina" :"新浪微博",

"qzone" :"QQ空间",

"renren" :"人人网",

"baidu" :"百度收藏",

"115" :"115",

"tsohu" :"搜狐微博",

"taobao" :"淘江湖",

"xiaoyou" :"腾讯朋友",

"hi" :"百度空间",

"fanfou" :"饭否",

"sohubai" :"搜狐白社会",

"feixin" :"飞信",

"tianya" :"天涯社区",

"youshi" :"优士网",

"msn" :"MSN",

"douban" :"豆瓣",

"twangyi" :"网易微博",

"mop" :"猫扑推客"

};

第一个数组很明了,就是每个分享按钮对应的链接地址,我把其中title和url都替换成了{title}和{url},之后在循环绑定的时候,通过正则去替换掉。第二个数组就是对应各自的中文名称,用于显示前台每个按钮的title,如:分享到腾讯微博、分享到新浪微博等。

因为js没有多维数组的概念,所以我就定义了2数组。接下来就是js代码实现部分了(为了当作教程,我把一些参数直接写死了,便于大家理解)。

$("div").addClass("hr-share-16");

var title = document.title;

var url = window.location.href;

function eFunction(str){

return function(){

window.open(formatmodel(shareico[str],{title:title, url:url}));

}

}

for(si in shareico){

$(".hr-share-"+si).die('click').live('click',eFunction(si)).attr("title","分享到"+shareiconame[si]);

}

这里,我首先给最外面那个div容器添加了一个class样式,就是我上面说到的那个,执行到这句代码后,你会发现页面上按钮的样式都出来了。

接着,我分别通过document.title和window.location.href获取到了当前页面的标题和链接。然后是一个叫eFunction的方法,这个跳过下,等会说。

下面是一个for循环,这里就是实现了循环绑定点击事件的效果。这里需要注意两点:一,因为我是写成插件,所以页面上可能不止一处用到分享按钮,为了防止重复事件绑定,所以我在绑定每个事件前都用die去解除绑定;二,我用的是live,而不是bind,因为我担心可能有的项目里的分享插件是通过ajax在页面载入完毕之后再载入进来的,所以我绑定就直接用live绑定了。

再说下那个eFunction的问题,肯定有人会问为什么不把eFunction里的内容直接写在live的click事件里。其实我最开始也是这么做的,但不这么做的原因很简单,我无法把自定义的参数传进去。至于为什么,我问了下一些JS高人,是个闭包的问题,这个东西我不是很清楚,总之就是找了这么一个办法来解决了。如果有人能给我具体讲解下闭包的问题,我非常感谢。

在绑定事件里还有一个formatmodel方法,这个是替换用的,也就是我上面说的,用正则去替换掉{title}和{url},这个function大家可以参考学习下,能用在很多地方:

function formatmodel(str,model){

for(var k in model){

var re = new RegExp("{"+k+"}","g");

str = str.replace(re,model[k]);

}

return str;

}

做到这一步,就已经全部OK了。有人会问那个“更多”按钮的怎么没说,其实那个和js没有太大联系了,只是html+css的展示效果而已,事件绑定还是上面那段核心代码,如果有兴趣,可以下载我整个插件源码进行查看,插件免费开源使用,可以随意修改,但请保留作者和联系方式。

完整插件查看地址:点击进入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京理工大学珠海学院专业计算机类,北京理工大学珠海学院计算机学院网络工程专业...

北京理工大学珠海学院计算机学院网络工程专业发表时间:2019-10-10作者:211大学网日前,在计算机学院网络工程专业林开荣、张海燕老师的带领下,6名来自北京理工大学珠海学院2016级网络工程专业学生参加了珠海市职业技能竞赛云计算工…

国防科技大学计算机学院教员,我国最好的四所科技大学,第一名排名世界前列,还有一所是铁饭碗...

分享亲子快乐,交流教育知识,欢迎关注陆北老师2021年泰晤士世界大学排名揭晓,中国科技大学进入了前一百名,而南方科技大学也进入了前三百名。其实我国的科技类大学,以中国科技大学为首,有四所的实力非常雄厚…

计算机图形学基础教程论文,计算机图形学小论文

为毕业生写计算机图形学小论文提供计算机图形学小论文范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文,包括论文选题、开题报告、文献综述、任务书、参考文献等,是优秀免费计算机图形学小论文网站。计算机图形学的发展及应用探讨摘要计算机图形学…

哔哩哔哩服务器在哪个文件夹,哔哩哔哩缓存在哪个文件夹 具体操作步骤

我们在手机b站中缓存了视频,如果想要找到源文件,就必须要在手机的内部存储中去寻找,实际上,手机b站缓存的视频隐藏的很深,其查看路径为:文件管理/本地/内部存储/android/data/tv.danmaku.bili/download/“随…

超算和服务器性能,烽火GPU高性能服务器助力武大超算中心建设

近日,继“武汉大学100G高速网络及网格计算集群采购项目”中标后,烽火GPU高性能服务器再次中标“武汉大学GPU集群采购项目”。作为行业首例,此次烽火将在武大超算中心同时提供Intel KNL以及NVIDIA GPU超算解决方案,两种顶尖HPC方案…

fastai学习:01_intro Questionnaire

fastAI Questionnaire 感觉还挺多的,怪不得说每一课要额外8小时进行学习。 1.Do you need these for deep learning? Lots of math T / F Lots of data T / F Lots of expensive computers T / F A PhD T / F F F F F 2.Name five areas where deep learning is …

fastai学习:02_production Questionnaire

1.Where do text models currently have a major deficiency? Deep learning is currently not good at generating correct responses! We don’t currently have a reliable way to, for instance, combine a knowledge base of medical information with a deep learning m…

fastai学习:04_mnist_basics Questionnaire

1.How is a grayscale image represented on a computer? How about a color image? 灰度图:单通道,0-256 彩色图:三通道RGB或HSV,0-256 2.How are the files and folders in the MNIST_SAMPLE dataset structured? Why? 分为…

【论文阅读笔记】Detecting Camouflaged Object in Frequency Domain

1.论文介绍 Detecting Camouflaged Object in Frequency Domain 基于频域的视频目标检测 2022年发表于CVPR [Paper] [Code] 2.摘要 隐藏目标检测(COD)旨在识别完美嵌入其环境中的目标,在医学,艺术和农业等领域有各种下游应用。…

python3 上传文件到目标机器_Python3 +服务器搭建私人云盘,再也不怕限速了

先来看看效果电脑访问手机访问Windows版本搭建(1).首先你需要在你的电脑上或者服务器上安装Python3.X。(2).然后通过如下指令来安装updog库,网上有很多关于updog的介绍,我这里就不详细说pip3 install updog(3).静静的等他安装完成,然后执行以…

tableau度量值计算_Tableau图表界面组成介绍

声明:内容来源拉勾教育数据分析训练营课程视频1 Tableau工作表基本界面基础概念:维度、度量、聚合、粒度。维度: 维度包含定量值(例如名称、日期或地理数据),可以使用维度进行分类、分段以及揭示数据中的详细信息。维度影响视图中的详细级别。…

小强升职记思维导图_你学会用 “思维导图” 学英语了吗?

今天我们来讲讲目前比较火爆的“思维导图学习法”。思维导图又叫“MIND MAP”,是英国人托尼博赞发明的一种思维工具。托尼博赞本人在心理学、语言学、数学以及科学方向均获得过学位,而且他还创造了世界脑力奥林匹克运动。虽然大师已逝,但是这…

hive币涨幅空间大吗_自动消防水炮只能安装在大空间场所吗

在大家不了解或者不清楚自动消防水炮的时候,经过一些厂家解释或者了解产品后,都知道是一种能够自动跟踪定位火焰并在短时内灭火的喷水系统,而且适用于安装在一些高大空间场所中,那么这是不是意味着,只能在大空间场所安…

可以直接考甲级吗_函授本科可以考四级吗

函授本科是可以考英语四级的。但必须经过学生所在学校同意,才可以在本校报名参加考试。函授本科可以考四级吗目前来说不管是函授大专还是本科,是可以考英语四级的,但应经所报考的学校同意,可在成人高考报考学校报名参加考试。函授本科用处大不大?函授本…

duration转为时间戳_Flink Table APIamp;SQL编程指南之时间属性(3)

Flink总共有三种时间语义:Processing time(处理时间)、Event time(事件时间)以及Ingestion time(摄入时间)。关于这些时间语义的具体解释,可以参考另一篇文章Flink的时间与watermarks详解。本文主要讲解Flink Table API & SQL中基于时间的算子如何定…

旅游系统_旅游标识系统,必须真的“旅游化”

标识是为游客传递路线,指明景点位置、起安全警示作用以及传达公园发展理念的标识(牌)或标识物,是公园的重要组成部分,有助于旅游者顺利完成游览过程,获得满意的旅游体验。好的完善的标识系统,可以起到画龙点睛的作用&a…

如何在linux下启动和关闭oracle服务

1.前言 确保我们能够访问oracle数据库包含两部分,一个是oracle实例,一个是监听,两个同时开启,我们才能正常的使用数据库,因此我们在关闭和启动oracle服务时,也需要同时操作实例和监听。能够操作linux的工具…

exfat为什么不适合机械硬盘_为什么有人说小排量车不适合跑高速,多少排量的车适合?...

阅读本文前,请您先点击上面的蓝色字体“梅赛德斯丶Benz”,再点击“关注”,这样您就可以继续免费收到祝福了。每天都有分享,完全是免费订阅,请放心关注。 哈喽,小伙伴们关注“梅塞德斯丶Benz”每…

rust石头墙几个c4_石头在景观中的运用

石材的运用横跨几个世纪,经久不衰。在景观设计中仍然是一个受欢迎的材料。运用好了可以很好的彰显景观的特性。石头的优点持续一生;非常耐用;容易使用;可以用在墙壁装修,铺路,以及重复使用;有不…

h5禁用浏览器下载视频_Flash正式被全球禁用,只有中国版还活着

这个弹窗常用 Chrome 或 Edge 浏览器的用户应该很熟悉,基本上每月都能看到几次。说起来 Adobe Flash Player 也是老朋友,这个 F 红标从 4399 小游戏到视频网站默认播放器,二十年来几乎伴随互联网一代人成长。图源自小众软件但技术总在进步&am…