那些小事(一)---网页分享的实现和特效
最近有许多节日,电子商务网站的各种活动层出不穷,最近参加一个淘网址--让熊猫飞一会,感觉与自己曾经做过的活动有许多类似的地方。所以将这些贴出来,做个总结,小白工作仅半年,欢迎指教。
这一季是关于网页分享的实现
基本实现方式
使用<a href=””></a>的方式将分享信息包含在href中。
分享信息 = 网站链接 + “?”+ 分享内容 (+ 特定ID)。
网站链接不同网站是不同的,如:
新浪微博:http://v.t.sina.com.cn/share/share.php
人人网:http://share.renren.com/share/buttonshare.do
分享内容
分享内容一般由title、url和content、图片4部分组成,依据不同公司的要求又有变化。根据不同网站链接编码方式又有不同。
往往需要将汉字和特殊字符进行转码。
var url=encodeURIComponent(location.href);//处理url中的特殊字符
var product=document.getElementById("productFeature").value; //产品特色
productFeature = productFeature.replace(/<[^>].*?>/g,"");//去除html标签
productFeature = productFeature.replace(/\r\n/g,"")//去除换行符
var title = encodeURIComponent(productFeature);//对汉字进行编码,若直接从网页中抓取则还需要使用正则去除html标记等
varpName=encodeURIComponent(document.getElementById("productName").value) //产品名称
varpic=encodeURIComponent("http://www.sinosig.com"+document.getElementById("productImage").value); //产品图片
经过这样处理后基本就可以满足大部分网站了,但是新浪微博需要将汉字转换为gb2312编码格式的.
而搜狐微博则可以直接使用汉字:
也许是因为搜狐微博是用jsp页面接受信息的原因。
最终完整的分享链接则像:
http://v.t.sina.com.cn/share/share.php?title=%E5%BF%AB%E6%9D%A5%E7%8E%A9%EF%BC%81%E6%B7%98%E5%AE%9D%E7%BD%91%E7%9A%84%23tao123%E9%80%81%E6%B1%BD%E8%BD%A6%23%E4%BA%86%EF%BC%81%E7%8E%A9%E8%BD%AC%E7%9B%98%E5%8F%AF%E4%BB%A5%E6%8A%BD%E5%A5%96%E5%BE%97ipad%EF%BC%81%E9%82%80%E8%AF%B7%E5%A5%BD%E5%8F%8B%E6%9C%80%E5%A4%9A%E7%9A%84%E7%94%A8%E6%88%B7%E8%BF%98%E8%83%BD%E5%BE%97%E5%88%B0%E7%86%8A%E7%8C%AB%E6%B1%BD%E8%BD%A6%E4%B8%80%E8%BE%86%EF%BC%81&url=http%3A%2F%2Fgeili.tao123.com
有些网站只要求title即可,比如新浪微博,它只有一个信息文本框,便将title中的信息放入。而百度收藏既有标题又有描述,故若只有title没有content,描述便不显示任何信息。
http://t.163.com/article/user/checkLogin.do?info=%E5%BF%AB%E6%9D%A5%E7%8E%A9%EF%BC%81%E6%B7%98%E5%AE%9D%E7%BD%91%E7%9A%84%23tao123%E9%80%81%E6%B1%BD%E8%BD%A6%23%E4%BA%86%EF%BC%81%E7%8E%A9%E8%BD%AC%E7%9B%98%E5%8F%AF%E4%BB%A5%E6%8A%BD%E5%A5%96%E5%BE%97ipad%EF%BC%81%E9%82%80%E8%AF%B7%E5%A5%BD%E5%8F%8B%E6%9C%80%E5%A4%9A%E7%9A%84%E7%94%A8%E6%88%B7%E8%BF%98%E8%83%BD%E5%BE%97%E5%88%B0%E7%86%8A%E7%8C%AB%E6%B1%BD%E8%BD%A6%E4%B8%80%E8%BE%86%EF%BC%81+http%3A%2F%2Fgeili.tao123.com"
这是网易微博的分享链接,它只有一个参数info,其他信息则使用+号连接。
encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
页面特效实现
由于可以提供分享应用的网站众多,所以可能直接显示的分享网站并不全,这样就要求必须隐藏一部分分享网站,使用一些不同触发条件使分享网站全部展示。
目前在春晚和淘宝熊猫活动使用的方式不同,但均使用jquery的动画效果实现。
代码如下:熊猫项目中实现方式较为简单
HTML代码:由于可以提供分享应用的网站众多,所以可能直接显示的分享网站并不全,这样就要求必须隐藏一部分分享网站,使用一些不同触发条件使分享网站全部展示。
目前在春晚和淘宝熊猫活动使用的方式不同,但均使用jquery的动画效果实现。
代码如下:
熊猫项目中实现方式较为简单
HTML代码:
<div class="share_title">......//显示的若干个分享链接<span class="icon"></span></div>
<ul class="share_cnt cf">
<li></li><li></li><li></li><li></li>//其余的分享链接,并且这一部分是默认隐藏的
</ul>
JS代码
//页顶分享弹出
var time = 0;
$(".share_title span,.share_cnt").mouseover(function(){
$(".share_cnt").show();//其余的分享链接显示
clearTimeout(time);
}).mouseout(function(){
time = setTimeout(function(){
$(".share_cnt").hide();//其余的分享链接隐藏
},300);
});
春晚项目的效果是滑动效果,显得较为复杂:
HTML代码
<divid="shareBarWrap"style="width:666px;position:absolute; overflow:hidden; padding:0px; margin:0px; display:none;">//静态容器
<divid="shareBar"style="width:666px; height:33px; position:relative; left:666px; top:0px; background-color:white; padding:0px; marign:0px; border:none;">//动态容器包裹,由于分享图片是由右向左滑动,所以注意着重的2个参数
<imgsrc="share_background.jpg"border="0"usemap="#ShareMap"width="666px" height="33" />
<map name="ShareMap" id="ShareMap">
<areashape="rect"coords="120,0,190,35"id="kaixin"onfocus="this.blur();"/>
</map>
</div>
</div>
//onFocus="this.blur();"这一句可以消除点击之后的焦点虚线框,但他对FF等支持并不好,改变border的值为0效果最好
<img src="woyaoshangchunwan.jpg" border="0" usemap="#Map" alt="春晚"/>
<map name="Map" id="Map">
<area id="addFavoriteBtn" shape="rect" coords="705,10,785,30" href="#" onFocus="this.blur();"/>
<area id="shareRect" shape="rect" coords="810,10,890,30" href="#" onFocus="this.blur();"/>
</map>
</div>
//分享图片隐藏在一个动态容器shareBar中,动态容器又包含在静态的shareBarWrap中,shareBarWrap容器是由“分享此页面”触发显示的。
而这个触发点是一整张图片的一部分
所以这里大量使用了map标签
HTML <map> 标签
定义和用法
定义一个客户端图像映射。图像映射(image-map)指带有可点击区域的一幅图像。
提示和注释:
注释:area 元素永远被嵌套在 map 元素内部。area 元素可定义图像映射中的区域,这块区域可以当作导航用。
注释:<img>中的 usemap 属性可引用 <map> 中的 id 或 name 属性(取决于浏览器),所以我们应同时向 <map> 添加 id 和 name 属性。
shape="rect" 指定义了一个正方形coords="810,10,890,30" 分别为左上角和右下角坐标
shape="circ" 定义了一个圆形 coords="50,50,25" 圆点坐标50,50
JS代码
$(document).ready(function(){
var opt = {
moveDirection:"left",
startPos:{left:140, top:0},
animateType:"slide",
triggerObjId:"shareRect",//页面加载时便与”分享此页面”关联
delay:1000,
title:"春晚"
};
settingShareBar(opt);//调用滑动效果的方法
}
这一部分的opt是这次活动的最终滑动方案,即向左滑动,时间为1秒
settingShareBar是滑动方案实现的通用代码,可以选择left、right、up、down4中滑动方案,触发id、title默认为空需要传递。
function settingShareBar(opt)
{
var option = jQuery.extend({
moveDirection:"left",//right,up,down
startPos:{left:0, top:0},
animateType:"slide",
triggerObjId:null,
delay:2000,
title:null
},opt||{});//使用extend使需要的效果覆盖默认的参数
if (option.triggerObjId == null)
{
alert("没有事件触发对象");
return;
}
if (option.title) titleFromParam = option.title;
var $shareBarWrap = $("#shareBarWrap");//得到静态容器
var $shareBar = $("#shareBar");//得到动态容器
var shareBarStartLeft = 0;
var shareBarEndLeft = 0;
var shareBarStartTop = 0;
var shareBarEndTop = 0;
var shareBarWidth = 666;//与容器的宽度一致
var shareBarHeight = 66;//是容器高度的2倍
if (option.animateType == "slide")
{
$shareBarWrap.css("left",option.startPos.left+"px");
$shareBarWrap.css("top",option.startPos.top+"px");
//确定静态容器在页面中的位置
if (option.moveDirection == "left")
{
shareBarStartLeft = shareBarWidth;
$shareBar.css("left",shareBarStartLeft+"px");
}//若是向左滑动,则将分享条的开头在容器的最右端
else if (option.moveDirection == "right")
{
shareBarStartLeft = 0-shareBarWidth;
$shareBar.css("left",shareBarStartLeft+"px");
}//若是向右滑动,则将分享条的末尾在容器的最左端,此时坐标是负值
else if (option.moveDirection == "up")
{
shareBarStartTop = shareBarHeight;
$shareBar.css("top",shareBarStartTop+"px");
}//同理
else if (option.moveDirection == "down")
{
shareBarStartTop = 0-shareBarHeight;
$shareBar.css("top",shareBarStartTop+"px");
}//同理
}
//给 ‘分享此页面’ 绑定事件
$("#"+option.triggerObjId).bind("mouseover",function(event){
$shareBar.stop();
if (option.moveDirection== "left" || option.moveDirection == "right")
{
$shareBarWrap.css("display","");
$shareBar.animate({left:shareBarEndLeft},option.delay);
}//从left:666滑动到left:0,或是从left:-666滑动到left:0
else if (option.moveDirection == "up" || option.moveDirection == "down")
{
$shareBarWrap.css("display","");
$shareBar.animate({top:shareBarEndTop},option.delay);
}
});
$("#"+option.triggerObjId).bind("mouseout",function(){
$shareBar.stop();
if(option.moveDirection == "left" || option.moveDirection == "right")
{
$shareBar.animate({left:shareBarStartLeft},option.delay,null,function(){$shareBarWrap.css("display","none");});
}//回到开始的位置,callback方法设置静态容器为不可见
else if (option.moveDirection == "up" || option.moveDirection == "down")
{
$shareBar.animate({top:shareBarStartTop},option.delay,null,function(){$shareBarWrap.css("display","none");});
}
});
//分享条绑定事件
$shareBar.bind("mouseover",function(){
$shareBar.stop();//停止动画
if(option.moveDirection == "left" || option.moveDirection == "right")
{
$shareBarWrap.css("display","");
$shareBar.animate({left:shareBarEndLeft},option.delay);
}//在分享条中编写动画是为了在鼠标移开分享按钮后,分享条回滚到初始位置
else if (option.moveDirection == "up" || option.moveDirection == "down")
{
$shareBarWrap.css("display","");
$shareBar.animate({top:shareBarEndTop},option.delay);
}
});
$shareBar.bind("mouseout",function(){
$shareBar.stop();
if (option.moveDirection == "left" || option.moveDirection == "right")
{ $shareBar.animate({left:shareBarStartLeft},option.delay,null,function(){$shareBarWrap.css("display","none");});
}//同样在分享条的鼠标移出事件的实现与分享按钮一样
else if (option.moveDirection == "up" || option.moveDirection == "down")
{ $shareBar.animate({top:shareBarStartTop},option.delay,null,function(){$shareBarWrap.css("display","none");});
}
});
分享实现之番外篇
在实现分享的同时,可能会有复制网站链接和加入网站收藏等功能
复制网站链接到剪切板
function copy1(){
var obj = document.getElementById('id');
var clipBoardContent = "";
clipBoardContent += obj.innerText;
obj.select();
window.clipboardData.setData("Text", clipBoardContent);
alert("复制成功!");
}
function copy2(){
var obj = document.getElementById('id');
obj.select();
js = obj.createTextRange();
js.execCommand("Copy");
alert("复制成功!");
}
上面两种方式都可以实现将文本框中的信息复制到剪切板的功能
加入收藏
window.external.addFavorite(sURL, sTitle);
Surl = window.location
sTitle = document.title
posted on 2011-03-07 09:35 waitingfortime 阅读(790) 评论(0) 编辑 收藏 举报