js頁面文字選中後分享到新浪微博實現

js頁面文字選中後分享到新浪微博實現

by zhangxinxu from http://www.zhangxinxu.com
本文地址:http://www.zhangxinxu.com/wordpress/?p=1428 javascript

1、功能簡述

正是微博如火如荼的時節,其中各個微博的分享功能是網站推廣產品的好東東啊,此時如何方便快捷的使用微博的分享功能就顯得比較重要了。個人站點每篇文章的底部有一些分享的連接:
文章底部的一些分享功能 張鑫旭-鑫空間-鑫生活 php

不過我以爲這些分享基本上就是聾子的耳朵——擺設。除非這篇文章驚天地、泣鬼神,痛徹心扉,穿越前世此生。可是,若是有更加方便快捷的分享方式,這種冷淡得讓人結冰的場面或許就不會常常出現。 html

通常翻譯軟件都有劃詞翻譯功能,例若有道桌面詞典的桌面劃詞翻譯功能:
有道桌面詞典劃詞翻譯設置截圖 張鑫旭-鑫空間-鑫生活 java

啓用後,隨便選中那個軟件的一段文字,就會出現相似這樣子的浮動提示框:
劃詞翻譯功能示例截圖 張鑫旭-鑫空間-鑫生活 web

在web頁面上,咱們也是能夠實現相似的效果的:劃詞→顯示提示→分享。這就是本文要展現的內容。 chrome

2、效果與demo

demo
您能夠狠狠地點擊這裏:js文字選中分享到新浪微博demo 瀏覽器

demo頁面的文字是我點兵點將隨機找的篇博客內容,純粹示例。隨便選擇一段文字,結果就會出現個新浪的怪眼睛logo,以下圖:
demo頁面文字選擇後 張鑫旭-鑫空間-鑫生活 wordpress

而後,點擊那個晃啊晃的猥瑣的眼睛,就實現了選中文字分享到新浪微博的功能啦——會打開個新頁面——以下效果:
分享到新浪微博功能實現之截圖 張鑫旭-鑫空間-鑫生活 網站

是否是分享起來很簡單很方便啊! url

其實呢,本篇文章所在的頁面自己就是個demo,你使用鼠標選中一段文字看看,哦呵呵,是否是有反應啊,不要猶豫,果斷分享吧。//zxx:若是您發現並無此效果,同時您沒有禁用javascript,那麼,您多是在rss閱讀器中或是在其餘邪門歪道的網站上閱讀本文,點擊或瀏覽器地址欄中輸入如下地址http://www.zhangxinxu.com/wordpress/?p=1428能夠看到分享功能。

3、方法與代碼

選中即分享的功能看上去比較高級,其實實現是至關簡單的。其中的會讓人頭大,通常人也不感興趣的原理這裏就直接跳過。這個js文字選中後分享到新浪微博的功能我簡單的封裝了下,方法名是:$sinaMiniBlogShare,固然,您不喜歡能夠換掉,甚至不要,此方法完整代碼以下:

var $sinaMiniBlogShare = function(eleShare, eleContainer) {
	var eleTitle = document.getElementsByTagName("title")[0];
	eleContainer = eleContainer || document;
	var funGetSelectTxt = function() {
		var txt = "";
		if(document.selection) {
			txt = document.selection.createRange().text; // IE } else {
			txt = document.getSelection();
		}
		return txt.toString();
	};
	eleContainer.onmouseup = function(e) {
		e = e || window.event;
		var txt = funGetSelectTxt(), sh = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
		var left = (e.clientX - 40 < 0) ? e.clientX + 20 : e.clientX - 40, top = (e.clientY - 40 < 0) ? e.clientY + sh + 20 : e.clientY + sh - 40;
 		if (txt) {
 			eleShare.style.display = "inline";
 			eleShare.style.left = left + "px";
 			eleShare.style.top = top + "px";
 		} else {
 			eleShare.style.display = "none";
 		}
 	};
 	eleShare.onclick = function() {
 		var txt = funGetSelectTxt(), title = (eleTitle && eleTitle.innerHTML)? eleTitle.innerHTML : "未命名頁面";
 		if (txt) {
 			window.open('http://v.t.sina.com.cn/share/share.php?title=' + txt + '→來自頁面"' + title + '"的文字片斷&url=' + window.location.href);	
 		}
 	};
 };

能夠看到$sinaMiniBlogShare方法有兩個參數,eleShare和eleContainer,其中,前一個參數是必須的,指的是文字選中後出現的浮動層元素(在本文demo中就是新浪眼睛圖標);後面一個參數指文字選擇的容器元素,可選參數,若是不設置則指document元素,也就是整個頁面文字選中都會觸發分享的功能。

假設新浪微博分享圖標的HTML以下:

<img id="imgSinaShare" class="img_sina_share" title="將選中內容分享到新浪微博" src="http://simg.sinajs.cn/blog7style/images/common/share.gif" />

則直接:

$sinaMiniBlogShare(document.getElementById("imgSinaShare"));

就實現了選中文字分享到新浪微博的功能了。

這裏的方法沒有兼容性問題,IE之流,firefox或是chrome瀏覽器能夠輕鬆分享;另外,方法原生的javascript代碼,不依賴於任何庫,因此,只要瀏覽器不由用javascript,哪裏均可以使用,真可謂方便快捷,無孔不入,網頁開發,必備良藥。

4、結語及補充

其實呢,此方法不只支持新浪微博,支持企鵝微博(騰訊微博),狐狸微博(搜狐微博),也是能夠的,只要根據各個微博分享頁面的API地址,將window.open()中的地址換換就能夠了,我想,應該很簡單的。您要是有興致,能夠把這些亂七八糟的分享都集合到一個方法中,作出插件性質的,各個網站任意分享,經過參數接口靈活控制,估計會流行的。不過我我的不太喜歡選中一段文字後面跟着個浮動的跟屁蟲,尤爲是大大的跟屁蟲,看着眼煩,無興趣,因此,我是不會去整一個分享集合的插件的。

時間倉促,技術有限,文中出現表述不許確的地方在所不免,歡迎指正。

原創文章,轉載請註明來自張鑫旭-鑫空間-鑫生活[http://www.zhangxinxu.com]
本文地址:http://www.zhangxinxu.com/wordpress/?p=1428

相關文章
相關標籤/搜索