├── index.js
├── .gitignore
├── .babelrc
├── rollup.config.js
├── src
├── set-qq-share-info.js
├── handle-share
│ ├── qq.js
│ ├── sina.js
│ ├── qzone.js
│ ├── wx.js
│ ├── wxline.js
│ └── handle-qqbrowser.js
├── set-normal-share-info.js
├── init.js
├── util.js
├── set-wx-share-info.js
├── ui.js
├── index.js
└── style.js
├── LICENSE
├── demo
├── js-to.html
├── el.html
├── basic.html
├── popup.html
└── demo.html
├── package.json
├── README.md
└── dist
├── m-share.min.js
├── m-share.js
└── m-share-es6.js
/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./dist/m-share.js');
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | .DS_Store
3 | *.swp
4 | *.pyc
5 | .vscode
6 | package-lock.json
7 | yarn.lock
8 | coverage/
9 | npm-debug.log
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "comments": false,
3 | "presets": [
4 | [
5 | "env",
6 | {
7 | "modules": false
8 | }
9 | ]
10 | ],
11 | "plugins": [
12 | "polyfill-env"
13 | ]
14 | }
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import babel from 'rollup-plugin-babel';
2 |
3 | export default {
4 | entry: 'src/index.js',
5 | dest: 'dist/m-share.js',
6 | format: 'umd',
7 | name: 'Mshare',
8 | externalHelpers: true,
9 | plugins: [
10 | babel({
11 | exclude: 'node_modules/**',
12 | runtimeHelpers: true,
13 | externalHelpers: true
14 | })
15 | ]
16 | };
--------------------------------------------------------------------------------
/src/set-qq-share-info.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-22 21:31:32
4 | * @Last Modified by: backToNature
5 | * @Last Modified time: 2018-05-23 20:05:09
6 | */
7 | import util from './util.js';
8 | const qqJsSdkUrl = '//open.mobile.qq.com/sdk/qqapi.js?_bid=152';
9 |
10 | const setShareInfo = (info) => {
11 | mqq.data.setShareInfo({
12 | share_url: info.link,
13 | title: info.title,
14 | desc: info.desc,
15 | image_url: info.imgUrl
16 | })
17 | };
18 |
19 | export default (info) => {
20 | if (window.mqq && mqq.data && mqq.data.setShareInfo) {
21 | setShareInfo(info);
22 | } else {
23 | util.loadScript(qqJsSdkUrl, () => {
24 | setShareInfo(info);
25 | });
26 | }
27 | };
28 |
--------------------------------------------------------------------------------
/src/handle-share/qq.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-24 14:23:11
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-06-01 15:05:25
6 | */
7 |
8 | import util from '../util.js';
9 | import qqBrowserShare from './handle-qqbrowser.js';
10 | import ui from '../ui.js';
11 |
12 | export default (info) => {
13 | if (util.ua.isFromWx) {
14 | // 微信客户端
15 | ui.showRightTopTips();
16 | return;
17 | }
18 |
19 | if (util.ua.isFromQQ) {
20 | // 手机qq
21 | ui.showRightTopTips();
22 | return;
23 | }
24 |
25 | if (util.ua.isFromQQBrower) {
26 | // qq浏览器
27 | ui.hideMask();
28 | qqBrowserShare('qq', info);
29 | return;
30 | }
31 |
32 | ui.showBottomTips();
33 | };
34 |
--------------------------------------------------------------------------------
/src/handle-share/sina.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-24 14:23:11
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-06-01 15:05:39
6 | */
7 |
8 | import util from '../util.js';
9 | import qqBrowserShare from './handle-qqbrowser.js';
10 | import ui from '../ui.js';
11 |
12 | export default (info) => {
13 | if (util.ua.isFromQQBrower) {
14 | // qq浏览器
15 | ui.hideMask();
16 | qqBrowserShare('sina', info);
17 | return;
18 | }
19 |
20 | const query = `url=${encodeURIComponent(info.link)}&title=${encodeURIComponent(info.desc)}&desc=${encodeURIComponent(info.desc)}&pic=${encodeURIComponent(info.imgUrl)}`;
21 | location.href = `http://service.weibo.com/share/share.php?${query}`;
22 | // 都不是则弹层二维码提示分享
23 | };
24 |
--------------------------------------------------------------------------------
/src/set-normal-share-info.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backToNature
3 | * @Date: 2018-05-30 12:54:24
4 | * @Last Modified by: backToNature
5 | * @Last Modified time: 2018-05-30 13:39:38
6 | */
7 | export default (info) => {
8 | if (info.desc && !document.querySelector('meta[name$="cription"]')) {
9 | const $meta = document.createElement('meta');
10 | $meta.setAttribute('description', info.desc);
11 | }
12 | // 添加隐藏的img标签在body最前面
13 | if (info.imgUrl) {
14 | const $img = document.createElement('img');
15 | $img.style.cssText = 'width: 0;height: 0;position: absolute;z-index: -9999;top: -99999px;left: -99999px;';
16 | $img.onload = () => {
17 | document.body.insertBefore($img, document.body.firstChild);
18 | };
19 | $img.onerror = () => {
20 | $img.remove();
21 | };
22 | $img.src = info.imgUrl;
23 | }
24 | };
25 |
--------------------------------------------------------------------------------
/src/init.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backToNature
3 | * @Date: 2018-05-22 17:23:35
4 | * @Last Modified by: backToNature
5 | * @Last Modified time: 2018-05-30 17:39:03
6 | */
7 | import util from './util.js';
8 | import ui from './ui.js';
9 | import setNormalShareInfo from './set-normal-share-info.js';
10 | import setQQshareInfo from './set-qq-share-info.js';
11 |
12 | let isInit = false;
13 |
14 | export default (config) => {
15 | if (!isInit) {
16 | const info = {
17 | title: config.title,
18 | desc: config.desc,
19 | link: config.link,
20 | imgUrl: config.imgUrl
21 | };
22 | isInit = true;
23 | ui.initStyle(); // 加载样式
24 |
25 | // 配置通用分享设置
26 | if (config.setNormal !== false) {
27 | setNormalShareInfo(info);
28 | }
29 | // 配置手q分享内容
30 | if (util.ua.isFromQQ) {
31 | setQQshareInfo(config.types, info);
32 | }
33 |
34 | }
35 | };
--------------------------------------------------------------------------------
/src/handle-share/qzone.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-24 14:23:11
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-06-01 15:05:26
6 | */
7 |
8 | import util from '../util.js';
9 | import qqBrowserShare from './handle-qqbrowser.js';
10 | import ui from '../ui.js';
11 |
12 | export default (info) => {
13 | if (util.ua.isFromWx) {
14 | // 微信客户端
15 | ui.showRightTopTips();
16 | return;
17 | }
18 |
19 | if (util.ua.isFromQQ) {
20 | // 手机qq
21 | ui.showRightTopTips();
22 | return;
23 | }
24 |
25 | if (util.ua.isFromQQBrower) {
26 | // qq浏览器
27 | ui.hideMask();
28 | qqBrowserShare('qzone', info);
29 | return;
30 | }
31 | const query = `url=${encodeURIComponent(info.link)}&title=${encodeURIComponent(info.title)}&desc=${encodeURIComponent(info.desc)}&summary=${encodeURIComponent(info.desc)}&site=${encodeURIComponent(info.link)}`
32 | location.href = `http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?${query}`;
33 | };
--------------------------------------------------------------------------------
/src/handle-share/wx.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-23 21:20:45
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-06-01 15:07:06
6 | */
7 | import util from '../util.js';
8 | import qqBrowserShare from './handle-qqbrowser.js';
9 | import ui from '../ui.js';
10 |
11 | export default (info) => {
12 | if (util.ua.isFromWx) {
13 | ui.showRightTopTips();
14 | return;
15 | }
16 |
17 | if (util.ua.isFromQQ) {
18 | ui.showRightTopTips();
19 | return;
20 | }
21 | if (util.ua.isFromUC) {
22 | // uc浏览器
23 | ui.hideMask();
24 | if (util.ua.isFromIos) {
25 | window.ucbrowser && window.ucbrowser.web_share(info.title, info.desc, info.link, 'kWeixin', info.imgUrl, '', '');
26 | } else {
27 | window.ucweb && window.ucweb.startRequest("shell.page_share", [info.title, info.desc, info.link, 'WechatFriends', info.imgUrl, '']);
28 | }
29 | return;
30 | }
31 |
32 | if (util.ua.isFromQQBrower) {
33 | // qq浏览器
34 | ui.hideMask();
35 | qqBrowserShare('wx', info);
36 | return;
37 | }
38 |
39 | ui.showBottomTips();
40 | };
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 darkh
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/handle-share/wxline.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-24 14:17:21
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-06-01 15:05:57
6 | */
7 | import util from '../util.js';
8 | import qqBrowserShare from './handle-qqbrowser.js';
9 | import ui from '../ui.js';
10 |
11 | export default (info) => {
12 | if (util.ua.isFromWx) {
13 | // 微信客户端
14 | ui.showRightTopTips();
15 | return;
16 | }
17 |
18 | if (util.ua.isFromQQ) {
19 | // 手机qq
20 | ui.showRightTopTips();
21 | return;
22 | }
23 |
24 | if (util.ua.isFromUC) {
25 | // uc浏览器
26 | ui.hideMask();
27 | if (util.ua.isFromIos) {
28 | window.ucbrowser && window.ucbrowser.web_share(info.title, info.desc, info.link, 'kWeixinFriend', info.imgUrl, '', '');
29 | } else {
30 | window.ucweb && window.ucweb.startRequest("shell.page_share", [info.title, info.desc, info.link, 'WechatTimeline', info.imgUrl, '']);
31 | }
32 | return;
33 | }
34 |
35 | if (util.ua.isFromQQBrower) {
36 | // qq浏览器
37 | ui.hideMask();
38 | qqBrowserShare('wxline', info);
39 | return;
40 | }
41 |
42 | ui.showBottomTips();
43 | };
--------------------------------------------------------------------------------
/src/handle-share/handle-qqbrowser.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-23 21:36:23
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-05-29 14:05:55
6 | */
7 |
8 | import util from '../util.js';
9 |
10 | const qqShareJsSdk = '//jsapi.qq.com/get?api=app.setShareInfo,app.share';
11 |
12 | export default (type, info) => {
13 | const doShare = (to_app) => {
14 | const _doShare = () => {
15 | try {
16 | browser.app.share({
17 | title: info.title,
18 | description: info.desc,
19 | url: info.link,
20 | img_url: info.imgUrl,
21 | to_app
22 | }, (res) => {
23 | });
24 | } catch (e) {
25 | }
26 | };
27 | if (window.browser && browser.app && browser.app.share) {
28 | _doShare();
29 | } else {
30 | util.loadScript(qqShareJsSdk, _doShare);
31 | }
32 | };
33 | switch (type) {
34 | case 'wx':
35 | doShare(1);
36 | break;
37 | case 'wxline':
38 | doShare(8);
39 | break;
40 | case 'qq':
41 | doShare(4);
42 | break;
43 | case 'qzone':
44 | doShare(3);
45 | break;
46 | case 'sina':
47 | doShare(11);
48 | break;
49 | }
50 | };
--------------------------------------------------------------------------------
/demo/js-to.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | js调用分享
8 |
11 |
12 |
13 |
14 |
15 |
16 |
33 |
34 |
--------------------------------------------------------------------------------
/demo/el.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 指定元素分享
8 |
9 |
10 |
11 | 指定元素分享
12 |
13 |
34 |
35 |
--------------------------------------------------------------------------------
/demo/basic.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 基本配置
8 |
9 |
10 |
11 | 基本配置
12 |
13 |
35 |
36 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "m-share",
3 | "version": "1.0.2",
4 | "description": "h5页面分享组件、支持分享到微信、朋友圈、qq、QQ空间、QQ好友。",
5 | "main": "index.js",
6 | "scripts": {
7 | "server": "http-server -c-1 -p 8000 ./",
8 | "dev": "rollup src/index.js --watch --output.format umd --name \"Mshare\" --output.file dist/m-share.js -c rollup.config.js",
9 | "build": "npm run build:umd && npm run build:es6 && uglifyjs ./dist/m-share.js -o ./dist/m-share.min.js",
10 | "build:umd": "rollup src/index.js --output.format umd --name \"Mshare\" --output.file dist/m-share.js -c rollup.config.js",
11 | "build:es6": "rollup src/index.js --output.format es --name \"Mshare\" --output.file dist/m-share-es6.js"
12 | },
13 | "repository": {
14 | "type": "git",
15 | "url": "git+https://github.com/backToNature/m-share.git"
16 | },
17 | "keywords": [
18 | "share",
19 | "h5-share",
20 | "m-share",
21 | "social"
22 | ],
23 | "author": "'darkh' <'backtonature@foxmail.com'>",
24 | "license": "MIT",
25 | "bugs": {
26 | "url": "https://github.com/backToNature/m-share/issues"
27 | },
28 | "homepage": "https://github.com/backToNature/m-share#readme",
29 | "devDependencies": {
30 | "babel-core": "^6.26.3",
31 | "babel-plugin-polyfill-env": "^1.0.3",
32 | "babel-preset-env": "^1.7.0",
33 | "http-server": "^0.11.1",
34 | "rollup": "^0.59.2",
35 | "rollup-plugin-babel": "^3.0.4",
36 | "uglify-js": "^3.4.0"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/demo/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 弹窗分享
8 |
9 |
10 |
11 | 弹窗分享
12 |
13 |
36 |
37 |
--------------------------------------------------------------------------------
/src/util.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-22 20:08:19
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-05-29 11:24:07
6 | */
7 | const userAgent = window.navigator.userAgent;
8 | export default {
9 | loadScript(url, callback) {
10 | const doc = document;
11 | const head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElement;
12 | const script = doc.createElement('script');
13 | script.type = 'text/javascript';
14 | script.charset = 'utf-8';
15 | if (script.readyState) {
16 | script.onreadystatechange = function () {
17 | if (/loaded|complete/i.test(script.readyState)) {
18 | script.onreadystatechange = null;
19 | callback && callback.call(this);
20 | }
21 | };
22 | } else {
23 | script.onload = function () {
24 | callback && callback.call(this);
25 | };
26 | }
27 | script.src = url;
28 | head.insertBefore(script, head.firstChild);
29 | },
30 | execStyle(cssText) {
31 | const document = window.document;
32 | const styleTag = document.createElement('style');
33 | styleTag.setAttribute('type', 'text/css');
34 | if (document.all) {
35 | styleTag.styleSheet.cssText = cssText;
36 | } else {
37 | styleTag.innerHTML = cssText;
38 | }
39 | document.getElementsByTagName("head").item(0).appendChild(styleTag);
40 | },
41 | ua: {
42 | isFromAndroid: /android/gi.test(userAgent),
43 | isFromIos: /iphone|ipod|ios/gi.test(userAgent),
44 | isFromWx: /MicroMessenger/gi.test(userAgent),
45 | isFromQQ: /mobile.*qq/gi.test(userAgent),
46 | isFromUC: /ucbrowser/gi.test(userAgent),
47 | isFromQQBrower: /mqqbrowser[^LightApp]/gi.test(userAgent),
48 | isFromQQBrowerLight: /MQQBrowserLightApp/gi.test(userAgent)
49 | }
50 | };
--------------------------------------------------------------------------------
/src/set-wx-share-info.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backToNature
3 | * @Date: 2018-05-22 20:12:58
4 | * @Last Modified by: backToNature
5 | * @Last Modified time: 2018-05-31 15:16:45
6 | */
7 | import util from './util.js';
8 | const wxJsSdkUrl = '//res.wx.qq.com/open/js/jweixin-1.2.0.js';
9 |
10 | const setShareInfo = (type, info) => {
11 | switch (type) {
12 | case 'wx':
13 | wx.onMenuShareAppMessage(info); // 设置分享到微信好友内容
14 | break;
15 | case 'wxline':
16 | wx.onMenuShareTimeline(info); // 设置分享到微信朋友圈内容
17 | break;
18 | case 'qq':
19 | wx.onMenuShareQQ(info); // 设置分享到微信好友内容
20 | break;
21 | case 'qzone':
22 | wx.onMenuShareQZone(info); // 设置分享到qq空间
23 | break
24 | }
25 | };
26 |
27 | let isConfig = false;
28 |
29 | export default (types, config) => {
30 | const wxConfig = config.wx;
31 | const doSet = () => {
32 | const _wxConfig = Object.assign({
33 | jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone', 'onMenuShareWeibo']
34 | }, wxConfig);
35 | if (!isConfig) {
36 | wx.config(_wxConfig);
37 | isConfig = true;
38 | }
39 | wx.ready(() => {
40 | try {
41 | types.forEach(item => {
42 | const _info = {
43 | title: (config.infoMap && config.infoMap[item] && config.infoMap[item].title) || config.title,
44 | desc: (config.infoMap && config.infoMap[item] && config.infoMap[item].desc) || config.desc,
45 | link: (config.infoMap && config.infoMap[item] && config.infoMap[item].link) || config.link,
46 | imgUrl: (config.infoMap && config.infoMap[item] && config.infoMap[item].imgUrl) || config.imgUrl
47 | };
48 | setShareInfo(item, _info);
49 | });
50 | } catch (e) {}
51 | });
52 | };
53 | if (window.wx) {
54 | doSet();
55 | } else {
56 | util.loadScript(wxJsSdkUrl, () => {
57 | doSet();
58 | });
59 | }
60 | };
61 |
--------------------------------------------------------------------------------
/demo/demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | m-share
9 |
19 |
20 |
21 |
22 |
23 | 基础配置
24 |
25 |
26 | 弹层分享
27 |
28 |
29 | 指定dom渲染
30 |
31 |
32 |
33 | js调用分享
34 |
35 |
36 |
37 |
38 |
39 |
92 |
93 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # [m-share](http://backtonature.github.io/project/m-share)
2 |
3 | h5页面分享组件、支持分享到微信、朋友圈、新浪微博、QQ空间、QQ好友。
4 |
5 |
6 | [](http://backtonature.github.io/project/m-share)
7 |
8 | 点击查看[demo](http://backtonature.github.io/project/m-share/demo/demo.html)
9 |
10 | 下图为:1. 分享拉窗 2. 右上角提示(微信或手q客户端) 3. 弹层提示(其他浏览器)
11 |
12 | 
13 |
14 | ## 执行逻辑
15 |
16 | \- |微信客户端 | 手q | qq浏览器 | uc浏览器 | 其他浏览器
17 | -- | -- | -- | --| -- | --
18 | 分享到微信 | 提示点击右上角分享 | 提示点击右上角分享 | native分享 | native分享 | 弹层提示
19 | 分享到朋友圈 | 提示点击右上角分享 | 提示点击右上角分享 | native分享 | native分享 | 弹层提示
20 | 分享到qq | 提示点击右上角分享 | 提示点击右上角分享 | native分享 | - | 弹层提示
21 | 分享到qq空间 | 提示点击右上角分享 | 提示点击右上角分享 | native分享 | web分享 | web分享
22 | 分享到新浪微博 | web分享 | web分享 | web分享 | web分享 | web分享
23 |
24 | ## 安装
25 |
26 | 有两种安装方式
27 |
28 | 1. npm安装
29 |
30 | npm install m-share
31 |
32 | 2. script引入
33 |
34 |
35 |
36 | ## 快速开始
37 |
38 |
39 |
43 |
44 | ## 配置项
45 |
46 | const config = {
47 | link: 'http://www.qq.com', // 网址,默认使用window.location.href
48 | title: '标题', // 标题,默认读取document.title
49 | desc: '分享描述', // 描述, 默认读取
50 | imgUrl: 'http://backtonature.github.io/project/m-share/demo1.png' // 图片, 默认取网页中第一个img标签
51 | types: ['wx', 'wxline', 'qq', 'qzone', 'sina'], // 启用的社交分享,默认为全部启用
52 | infoMap: { // 针对不同平台设定不同分享内容
53 | wx: {
54 | link: '分享到微信的链接', // 覆盖分享到微信的链接
55 | title: '分享到微信的标题', // 覆盖分享到微信的标题
56 | desc: '分享到微信的描述', // 覆盖分享到微信的标题
57 | imgUrl: '分享到微信的图片链接' // 覆盖分享到微信的图片链接
58 | }
59 | },
60 | fnDoShare(type) {
61 | // 执行分享的回调,type为'wx', 'wxline', 'qq', 'qzone', 'sina'
62 | }
63 | };
64 |
65 | ***注意:***
66 |
67 | 1. 所有的配置参数都不是必填项
68 | 2. ```其他浏览器```并没有开放native分享的api,所以对分享到```微信```、```朋友圈```、```QQ好友```设置的```infoMap```参数,在```其他浏览器```和```手机qq客户端```下不会生效.
69 |
70 | ## 方法
71 |
72 |
73 | ### init(config) - [demo](http://backtonature.github.io/project/m-share/demo/basic.html)
74 |
75 | 初始化化页面所有class为```m-share```的元素。
76 |
77 |
78 | ### popup(config) - [demo](http://backtonature.github.io/project/m-share/demo/popup.html)
79 |
80 | 弹出分享弹窗
81 |
82 |
83 | ### wxConfig(config)
84 |
85 | 若当前页面为公众号页面,具备访问微信api的能力,可通过此方法配置微信分享。
86 |
87 | Mshare.wxConfig({
88 | title: '',
89 | link: '',
90 | desc: '',
91 | imgUrl: '',
92 | wx: {
93 | appId: '', // 必填,公众号的唯一标识
94 | timestamp: , // 必填,生成签名的时间戳
95 | nonceStr: '', // 必填,生成签名的随机串
96 | signature: '' // 必填,签名
97 | },
98 | infoMap: ...
99 | });
100 |
101 | ### render(el, config) - [demo](http://backtonature.github.io/project/m-share/demo/el.html)
102 |
103 | 对指定元素渲染分享icon,```el```为指定元素或者指定元素的选择器String。
104 |
105 |
106 |
110 |
111 |
112 | ### to(type, config) - [demo](http://backtonature.github.io/project/m-share/demo/js-to.html)
113 |
114 | js直接调用分享
115 |
116 |
117 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/src/ui.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backtonature
3 | * @Date: 2018-05-27 20:08:19
4 | * @Last Modified by: backtonature
5 | * @Last Modified time: 2018-05-30 21:05:38
6 | */
7 | import util from './util.js';
8 | import style from './style.js';
9 |
10 | let isStyleLoaded = false;
11 | export default {
12 | initStyle() {
13 | if (!isStyleLoaded) {
14 | util.execStyle(style.cssText);
15 | isStyleLoaded = true;
16 | }
17 | },
18 | showActionSheet(dom) {
19 | this.showMask();
20 | const $sheet = document.createElement('div');
21 | $sheet.id = 'm-share-actionSheet';
22 | $sheet.appendChild(dom);
23 | document.body.appendChild($sheet);
24 | window.setTimeout(() => {
25 | $sheet.style.cssText = '-webkit-transform: translateY(0);transform: translateY(0);';
26 | }, 0);
27 | },
28 | hideActionSheet() {
29 | const dom = document.querySelector('#m-share-actionSheet');
30 | if (dom) {
31 | // 渐变消失
32 | // dom.addEventListener('webkitTransitionend', () => {
33 | // dom.remove();
34 | // });
35 | // dom.addEventListener('transitionend', () => {
36 | // dom.remove();
37 | // });
38 | // dom.style.cssText = '-webkit-transform: translateY(100%);transform: translateY(100%);';
39 | dom.remove();
40 | }
41 | },
42 | showMask() {
43 | if (document.querySelector('.m-share-mask')) {
44 | return;
45 | }
46 | const $div = document.createElement('div');
47 | $div.className = 'm-share-mask';
48 | $div.addEventListener('click', () => {
49 | this.hideActionSheet();
50 | this.hideBottomTips();
51 | this.hideRightTips();
52 | this.hideMask();
53 | });
54 | document.body.appendChild($div);
55 | window.setTimeout(() => {
56 | $div.style.opacity = 0.7;
57 | }, 0);
58 | },
59 | hideMask() {
60 | const domList = document.querySelectorAll('.m-share-mask');
61 | for (let i = 0; i < domList.length; i++) {
62 | const item = domList[i];
63 | const removeDom = () => item.remove();
64 | // 渐变消失
65 | // item.addEventListener('webkitTransitionend', removeDom);
66 | // item.addEventListener('transitionend', removeDom);
67 | // item.style.cssText = 'opacity: 0';
68 | removeDom();
69 | }
70 | },
71 | showBottomTips() {
72 | this.showMask();
73 | const $tips = document.createElement('div');
74 | $tips.className = 'm-share-tips-bottom';
75 | $tips.innerHTML = '请打开浏览器的菜单进行分享点击“”或“”';
76 | document.body.appendChild($tips);
77 | window.setTimeout(() => {
78 | this.hideMask();
79 | this.hideBottomTips();
80 | }, 1400);
81 | },
82 | hideBottomTips() {
83 | const domList = document.querySelectorAll('.m-share-tips-bottom');
84 | for (let i = 0; i < domList.length; i++) {
85 | const item = domList[i];
86 | item.remove();
87 | }
88 | },
89 | showRightTopTips() {
90 | this.showMask();
91 | const $tips = document.createElement('div');
92 | $tips.className = 'm-share-tips';
93 | $tips.innerHTML = `
94 |
95 |
点击右上角“”
96 |
分享给朋友吧!
97 |
98 |
99 | `;
100 | document.body.appendChild($tips);
101 | window.setTimeout(() => {
102 | this.hideMask();
103 | this.hideRightTips();
104 | }, 1400);
105 | },
106 | hideRightTips() {
107 | const domList = document.querySelectorAll('.m-share-tips');
108 | for (let i = 0; i < domList.length; i++) {
109 | const item = domList[i];
110 | item.remove();
111 | }
112 | }
113 | };
114 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: backToNature
3 | * @Date: 2018-05-22 17:23:35
4 | * @Last Modified by: backToNature
5 | * @Last Modified time: 2018-06-01 15:00:51
6 | */
7 | import util from './util.js';
8 | import ui from './ui.js';
9 | import init from './init.js';
10 | import setWxShareInfo from './set-wx-share-info.js';
11 | import wxShare from './handle-share/wx.js';
12 | import wxlineShare from './handle-share/wxline.js';
13 | import qqShare from './handle-share/qq.js';
14 | import qzoneShare from './handle-share/qzone.js';
15 | import sinaShare from './handle-share/sina.js';
16 |
17 | const shareFuncMap = {
18 | wx: wxShare,
19 | wxline: wxlineShare,
20 | qq: qqShare,
21 | qzone: qzoneShare,
22 | sina: sinaShare
23 | };
24 |
25 | const typesMap = ['wx', 'wxline', 'qq', 'qzone', 'sina'];
26 |
27 | const getDefaultConfig = (config) => {
28 | config = config || {};
29 | const infoMapType = typeof config.infoMap;
30 | return {
31 | title: (config && config.title) || document.title,
32 | desc: (config && config.desc) || (document.querySelector('meta[name$="cription"]') && document.querySelector('meta[name$="cription"]').getAttribute('content')) || '',
33 | link: encodeURI((config && config.link) || window.location.href),
34 | imgUrl: (config && config.imgUrl) || (document.querySelector('img') && document.querySelector('img').getAttribute('src')) || '',
35 | types: (config && Array.isArray(config.types) && config.types) || ['wx', 'wxline', 'qq', 'qzone', 'sina'],
36 | wx: (config && config.wx) || null,
37 | fnDoShare: config.fnDoShare,
38 | infoMap: (infoMapType === 'function' || infoMapType === 'object' && !!config.infoMap) ? config.infoMap : {}
39 | };
40 | };
41 |
42 | export default {
43 | wxConfig(config) {
44 | const _config = getDefaultConfig(config);
45 | if (util.ua.isFromWx && _config.wx && _config.wx.appId && _config.wx.timestamp && _config.wx.nonceStr && _config.wx.signature) {
46 | setWxShareInfo(typesMap, _config);
47 | }
48 | },
49 | init(config) {
50 | const _config = getDefaultConfig(config);
51 | init(_config);
52 | const domList = document.querySelectorAll('.m-share');
53 | // 初始化
54 | for (let i = 0; i < domList.length; i++) {
55 | const item = domList[i];
56 | this.render(item, _config);
57 | }
58 | },
59 | // 渲染
60 | render(dom, config) {
61 | const _config = getDefaultConfig(config);
62 | init(_config);
63 | const getTmpl = (type) => {
64 | if (typesMap.indexOf(type) >= 0) {
65 | return ``;
66 | }
67 | return '';
68 | };
69 | let tmp = '';
70 | _config.types.forEach(item => {
71 | tmp += getTmpl(item);
72 | });
73 | if (typeof dom === 'string') {
74 | dom = document.querySelector(dom);
75 | }
76 | if (!dom) {
77 | return;
78 | }
79 | dom.innerHTML = tmp;
80 | dom.addEventListener('click', (e) => {
81 | const target = e.target;
82 | typesMap.forEach(item => {
83 | if (target.classList.contains(`m-share-${item}`)) {
84 | const shareData = {
85 | title: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].title) || _config.title,
86 | desc: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].desc) || _config.desc,
87 | link: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].link) || _config.link,
88 | imgUrl: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].imgUrl) || _config.imgUrl,
89 | fnDoShare: _config.fnDoShare
90 | };
91 | this.to(item, shareData);
92 | }
93 | });
94 | });
95 | },
96 | // 执行分享逻辑
97 | to(type, config) {
98 | const _config = getDefaultConfig(config);
99 | init(_config);
100 | if (typesMap.indexOf(type) >= 0) {
101 | if (_config.fnDoShare) {
102 | _config.fnDoShare(type);
103 | }
104 | shareFuncMap[type](_config);
105 | }
106 | },
107 | // 弹层分享
108 | popup(config) {
109 | const _config = getDefaultConfig(config);
110 | init(_config);
111 | const textMap = {
112 | wx: '微信好友',
113 | wxline: '朋友圈',
114 | qq: 'QQ好友',
115 | qzone: 'QQ空间',
116 | sina: '微博'
117 | };
118 | const dom = document.createElement('div');
119 | dom.className = 'm-share-flex';
120 | let tmp = '';
121 | const getTmpl = (type) => {
122 | if (typesMap.indexOf(type) >= 0) {
123 | return ``;
124 | }
125 | return '';
126 | };
127 | _config.types.forEach(item => {
128 | tmp += getTmpl(item);
129 | });
130 | dom.innerHTML = tmp;
131 | dom.addEventListener('click', (e) => {
132 | const target = e.target;
133 | typesMap.forEach(item => {
134 | if (target.classList.contains(`m-share-${item}`)) {
135 | ui.hideActionSheet();
136 | const shareData = {
137 | title: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].title) || _config.title,
138 | desc: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].desc) || _config.desc,
139 | link: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].link) || _config.link,
140 | imgUrl: (_config.infoMap && _config.infoMap[item] && _config.infoMap[item].imgUrl) || _config.imgUrl,
141 | fnDoShare: _config.fnDoShare
142 | };
143 | this.to(item, shareData);
144 | }
145 | });
146 | });
147 | ui.showActionSheet(dom);
148 | }
149 | };
--------------------------------------------------------------------------------
/src/style.js:
--------------------------------------------------------------------------------
1 | export default {
2 | cssText: `
3 | .m-share-mask {
4 | margin: 0;
5 | padding: 0;
6 | position: fixed;
7 | left: 0;
8 | bottom: 0;
9 | z-index: 2147483646;
10 | width: 100%;
11 | height: 100%;
12 | background: #000;
13 | opacity: 0;
14 | -webkit-transition: opacity .2s ease-in;
15 | transition: opacity .2s ease-in;
16 | }
17 | #m-share-actionSheet {
18 | margin: 0;
19 | padding: 0;
20 | font-family: "PingFang SC",Arial,"\\5FAE\\8F6F\\96C5\\9ED1",Helvetica,sans-serif;
21 | position: fixed;
22 | width: 100%;
23 | left: 0;
24 | bottom: 0;
25 | z-index: 2147483647;
26 | background: #fff;
27 | -webkit-box-sizing: border-box;
28 | box-sizing: border-box;
29 | padding: 30px 20px;
30 | -webkit-transform: translateY(100%);
31 | transform: translateY(100%);
32 | -webkit-transition: -webkit-transform .2s ease-in;
33 | transition: transform .2s ease-in;
34 | }
35 | #m-share-actionSheet div {
36 | margin: 0;
37 | padding: 0;
38 | }
39 | #m-share-actionSheet .m-share-sheet-title {
40 | font-size: 12px;
41 | color: #ababab;
42 | text-align: center;
43 | margin:10px 0 0 0;
44 | }
45 | #m-share-actionSheet .m-share-flex {
46 | display: -webkit-box!important;
47 | display: -webkit-flex!important;
48 | display: -ms-flexbox!important;
49 | display: flex!important;
50 | -webkit-flex-wrap: wrap;
51 | -ms-flex-wrap: wrap;
52 | flex-wrap: wrap
53 | }
54 | #m-share-actionSheet .m-share-flex>.m-share-cell {
55 | -webkit-box-flex: 1;
56 | -webkit-flex: 1;
57 | -ms-flex: 1;
58 | flex: 1;
59 | width: 0;
60 | -webkit-flex-basis: 0;
61 | -ms-flex-preferred-size: 0;
62 | flex-basis: 0;
63 | max-width: 100%;
64 | display: block;
65 | padding: 0!important;
66 | position: relative;
67 | text-align: center;
68 | }
69 | #m-share-actionSheet .m-share-iconfont {
70 | margin: 0;
71 | }
72 | .m-share-tips {
73 | font-family: "PingFang SC",Arial,"\\5FAE\\8F6F\\96C5\\9ED1",Helvetica,sans-serif;
74 | margin: 0;
75 | padding: 0;
76 | position: fixed;
77 | top: 3px;
78 | color: #fff;
79 | right: 20px;
80 | z-index: 2147483647;
81 | // background-color: #000;
82 | }
83 | .m-share-tips .m-share-tips-w {
84 | margin: 0;
85 | padding: 0;
86 | display: inline-block;
87 | font-size: 18px;
88 | position: relative;
89 | right: 1px;
90 | top: 7px;
91 | }
92 | .m-share-tips .m-share-tips-w .m-share-tips-p {
93 | margin: 0;
94 | padding: 0;
95 | color: #fff;
96 | font-size: 18px;
97 | }
98 | .m-share-tips-arrow {
99 | margin: 0;
100 | padding: 0;
101 | display: inline-block;
102 | width: 54px;
103 | height: 55px;
104 | background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABuCAMAAAD1cAb0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAC6UExURUdwTP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3HoUvYAAAA9dFJOUwDIjg4CBPr98Av39C4GghgTQOAnv6h97AjcN2dGH+gcbxAVz1WWIqGvuko0tNP+5eN42YhaUF/WmsQ8Y8we7g2hAAAEn0lEQVQYGe3AVXbjSAAF0CcuMZllZnabE6ff/rc1Lqtp5rdVOfORiy9fvnz5nxvg8wyPBT7LY++LhYtPkdw92rXcxCewjivSrnXwCaxO4ZH87uIT5Os+STtKoZ7Z6fNJLFv4BDVKfjqGereM0v0M9QaRoCRSKGflW75kF6h3Zam/MaHaZudRck5dqBZv2yy1BxbUai0mLO1rBRS7zWz+cEigVnoW/GFfv0GpXpTxl0MPKvWiGn9bdaHQ6FjjHyYB1GkNF/yDc+pAnZvu8U+TIIQq6VmQwudPezGFKmmUkdrSoSTae7IZuFBjHmXke/yNktAzkmJoQol4oTn+yWhQct5nO5v0uy5UcOsTTraD+dLn016LNZL+2YUC7ptm3+uxNV1R8jf5xCZt3YUCtbadRTmMK1/01GjYpDObo2rhuEE2jw9gc6DUfjNCvUnapzEqZm0+yMM0BYxZm1IzALoZyXqOaoXdi2+LILZgdnS+3ACkGekceqjWbdhsag88halPqXY1gDxySC0wUaXrTIj6BZKr2Xzy3+YA3K1PsrBQoWDVb0YFXo6aw6f+EE/jq0/6QxfVGUwyMe2EkPKhT0kb4cmM7iSjMSozyLJv3cSCFMY7SqJI8GQNTiTrLqpi6dl7ARMvZo2St73gJdAcOnqOyqwvBX667RyS+2bdhWTGNZucJKiOYeGHgd6k1DZQGtcdOrM1FLC6S0reOkHJ0Gx6kxgKGFe+zKYmSvOZQ0fPocCgT+m0MPBD0ia91RjVGy/7fLLbAX5aR3s6tR4q1zpubUoN/JJopKPFJqrWOXuU3hITP+WRz714oGpu2qeUdQf4xbr2yeYlQcVa75R8/YHfzM3MtrUGqtagZK+O+FNrptXqLioWTPZ88pcu/sW9dBJULH9rUxI9/FeIihnH75T8aQjVrI83vgxzC6oFHx6l1bQF1QbrPqWsMYBqYfKdkr9IoV5EyXtvQL0GJUeru1AuZWkXQ7me4IvoQTkjYymFckaNpQbUq7GkmVCuwdIkMKBaylJ/HUC1nuCLPw2g2HiesTTsWFCrtzmwFG1aUCvpTliKYEKt0a3OUg2qjRoLvrTbBhRzFwuPUraNoVartd3ZlLRtALXcje45lDK9C7VGRYOlfpFCLXdR9yiJZieAUklSu9uUTqeHAaVGRZ2l9iKAUr3edskX73DpQKlH91vTobRr53MoFI47s4ylpZ5DodC9rL8JSnb7fR1DoXFcX3oszd6SFpSxRvGxLhxKTV+fGlCmhaL4nvHF7utTI4QilpV0dU1wT9LhbtfZQJWWMS2W77Qp+X29mMOEEta8NzyfhGNTEoeoMFwoEJrjXqo3DhPalGyxPD/GIf5WksCECRMlE61Rso7P0/u7ECyJg66P5jDxt+LGbHhbB904H82D3nUzvX4s6tru4LHk+dpkuBm0TPw9a6p5XibuWW21qi9PK+/OzLYdPjmO53ur3frozlGN8NHImsJ2bDrc8zeHTbHQ9HN3MDZRmTAdfNxW2/62eRdS29aaK205e/voBrEbomKW1XI7eRFE3eijMdQ7UV4kc8NIYEKZEC6SMAxh4sv/2T8XLefQYLd95QAAAABJRU5ErkJggg==');
105 | background-size: 100%;
106 | }
107 | .m-share-tips-bottom {
108 | font-family: "PingFang SC",Arial,"\\5FAE\\8F6F\\96C5\\9ED1",Helvetica,sans-serif;
109 | margin: 0;
110 | padding: 0;
111 | font-size: 18px;
112 | position: fixed;
113 | color: #fff;
114 | top: 50%;
115 | left: 50%;
116 | width: 100%;
117 | z-index: 2147483647;
118 | -webkit-transform: translate(-50%, -50%);
119 | transform: translate(-50%, -50%);
120 | text-align: center;
121 | width: 240px;
122 | line-height: 1.72;
123 | }
124 |
125 | @font-face {font-family: "m-share-iconfont";
126 | src: url('data:application/x-font-ttf;charset=utf-8;base64,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') format('truetype'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
127 | }
128 | .m-share-iconfont {
129 | font-family:"m-share-iconfont" !important;
130 | font-size:26px;
131 | font-style:normal;
132 | -webkit-font-smoothing: antialiased;
133 | -moz-osx-font-smoothing: grayscale;
134 | padding: 5px;
135 | margin:0 0 0 10px;
136 | }
137 | .m-share-iconfont:first-child {
138 | margin: 0;
139 | }
140 | .m-share-iconfont-wx {
141 | color: #7bc549;
142 | border: 1px solid #7bc549;
143 | border-radius: 100%;
144 | }
145 | .m-share-iconfont-wx:active {
146 | background: #7bc549;
147 | color: #fff;
148 | }
149 | .m-share-iconfont-wx:before {
150 | content: "\\e61e";
151 | }
152 | .m-share-iconfont-sina {
153 | color: #ff763b;
154 | border: 1px solid #ff763b;
155 | border-radius: 100%;
156 | }
157 | .m-share-iconfont-sina:active {
158 | background: #ff763b;
159 | color: #fff;
160 | }
161 | .m-share-iconfont-sina:before {
162 | content: "\\e641";
163 | }
164 | .m-share-iconfont-qzone {
165 | color: #fdbe3d;
166 | border: 1px solid #fdbe3d;
167 | border-radius: 100%;
168 | }
169 | .m-share-iconfont-qzone:active {
170 | background: #fdbe3d;
171 | color: #fff;
172 | }
173 | .m-share-iconfont-qzone:before {
174 | content: "\\e728";
175 | }
176 | .m-share-iconfont-qq {
177 | color: #56b6e7;
178 | border: 1px solid #56b6e7;
179 | border-radius: 100%;
180 | }
181 | .m-share-iconfont-qq:active {
182 | background: #56b6e7;
183 | color: #fff;
184 | }
185 | .m-share-iconfont-qq:before {
186 | content: "\\e630";
187 | }
188 | .m-share-iconfont-wxline {
189 | color: #33b045;
190 | border: 1px solid #33b045;
191 | border-radius: 100%;
192 | }
193 | .m-share-iconfont-wxline:active {
194 | background: #33b045;
195 | color: #fff;
196 | }
197 | .m-share-iconfont-wxline:before {
198 | content: "\\e6e9";
199 | }
200 | .m-share-iconfont-menu {
201 | font-size: 12px;
202 | }
203 | .m-share-iconfont-menu:before {
204 | content: "\\e67e";
205 | }
206 | .m-share-iconfont-dots {
207 | font-size: 25px;
208 | color: #fff;
209 | }
210 | .m-share-iconfont-dots:before {
211 | content: "\\e656";
212 | }
213 | .m-share-iconfont-share {
214 | font-size: 17px;
215 | color: #fff;
216 | margin: 0;
217 | }
218 | .m-share-iconfont-share:before {
219 | content: "\\e6ae";
220 | }
221 | `
222 | };
--------------------------------------------------------------------------------
/dist/m-share.min.js:
--------------------------------------------------------------------------------
1 | (function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):global.Mshare=factory()})(this,function(){"use strict";var userAgent=window.navigator.userAgent;var util={loadScript:function loadScript(url,callback){var doc=document;var head=doc.head||doc.getElementsByTagName("head")[0]||doc.documentElement;var script=doc.createElement("script");script.type="text/javascript";script.charset="utf-8";if(script.readyState){script.onreadystatechange=function(){if(/loaded|complete/i.test(script.readyState)){script.onreadystatechange=null;callback&&callback.call(this)}}}else{script.onload=function(){callback&&callback.call(this)}}script.src=url;head.insertBefore(script,head.firstChild)},execStyle:function execStyle(cssText){var document=window.document;var styleTag=document.createElement("style");styleTag.setAttribute("type","text/css");if(document.all){styleTag.styleSheet.cssText=cssText}else{styleTag.innerHTML=cssText}document.getElementsByTagName("head").item(0).appendChild(styleTag)},ua:{isFromAndroid:/android/gi.test(userAgent),isFromIos:/iphone|ipod|ios/gi.test(userAgent),isFromWx:/MicroMessenger/gi.test(userAgent),isFromQQ:/mobile.*qq/gi.test(userAgent),isFromUC:/ucbrowser/gi.test(userAgent),isFromQQBrower:/mqqbrowser[^LightApp]/gi.test(userAgent),isFromQQBrowerLight:/MQQBrowserLightApp/gi.test(userAgent)}};var style={cssText:'\n .m-share-mask {\n margin: 0;\n padding: 0;\n position: fixed;\n left: 0;\n bottom: 0;\n z-index: 2147483646;\n width: 100%;\n height: 100%;\n background: #000;\n opacity: 0;\n -webkit-transition: opacity .2s ease-in;\n transition: opacity .2s ease-in;\n }\n #m-share-actionSheet {\n margin: 0;\n padding: 0;\n font-family: "PingFang SC",Arial,"\\5FAE\\8F6F\\96C5\\9ED1",Helvetica,sans-serif;\n position: fixed;\n width: 100%;\n left: 0;\n bottom: 0;\n z-index: 2147483647;\n background: #fff;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 30px 20px;\n -webkit-transform: translateY(100%);\n transform: translateY(100%);\n -webkit-transition: -webkit-transform .2s ease-in;\n transition: transform .2s ease-in;\n }\n #m-share-actionSheet div {\n margin: 0;\n padding: 0;\n }\n #m-share-actionSheet .m-share-sheet-title {\n font-size: 12px;\n color: #ababab;\n text-align: center;\n margin:10px 0 0 0;\n }\n #m-share-actionSheet .m-share-flex {\n display: -webkit-box!important;\n display: -webkit-flex!important;\n display: -ms-flexbox!important;\n display: flex!important;\n -webkit-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap\n }\n #m-share-actionSheet .m-share-flex>.m-share-cell {\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 0;\n -webkit-flex-basis: 0;\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n max-width: 100%;\n display: block;\n padding: 0!important;\n position: relative;\n text-align: center;\n }\n #m-share-actionSheet .m-share-iconfont {\n margin: 0;\n }\n .m-share-tips {\n font-family: "PingFang SC",Arial,"\\5FAE\\8F6F\\96C5\\9ED1",Helvetica,sans-serif;\n margin: 0;\n padding: 0;\n position: fixed;\n top: 3px;\n color: #fff;\n right: 20px;\n z-index: 2147483647;\n // background-color: #000;\n }\n .m-share-tips .m-share-tips-w {\n margin: 0;\n padding: 0;\n display: inline-block;\n font-size: 18px;\n position: relative;\n right: 1px;\n top: 7px;\n }\n .m-share-tips .m-share-tips-w .m-share-tips-p {\n margin: 0;\n padding: 0;\n color: #fff;\n font-size: 18px;\n }\n .m-share-tips-arrow {\n margin: 0;\n padding: 0;\n display: inline-block;\n width: 54px;\n height: 55px;\n background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABuCAMAAAD1cAb0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAC6UExURUdwTP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3HoUvYAAAA9dFJOUwDIjg4CBPr98Av39C4GghgTQOAnv6h97AjcN2dGH+gcbxAVz1WWIqGvuko0tNP+5eN42YhaUF/WmsQ8Y8we7g2hAAAEn0lEQVQYGe3AVXbjSAAF0CcuMZllZnabE6ff/rc1Lqtp5rdVOfORiy9fvnz5nxvg8wyPBT7LY++LhYtPkdw92rXcxCewjivSrnXwCaxO4ZH87uIT5Os+STtKoZ7Z6fNJLFv4BDVKfjqGereM0v0M9QaRoCRSKGflW75kF6h3Zam/MaHaZudRck5dqBZv2yy1BxbUai0mLO1rBRS7zWz+cEigVnoW/GFfv0GpXpTxl0MPKvWiGn9bdaHQ6FjjHyYB1GkNF/yDc+pAnZvu8U+TIIQq6VmQwudPezGFKmmUkdrSoSTae7IZuFBjHmXke/yNktAzkmJoQol4oTn+yWhQct5nO5v0uy5UcOsTTraD+dLn016LNZL+2YUC7ptm3+uxNV1R8jf5xCZt3YUCtbadRTmMK1/01GjYpDObo2rhuEE2jw9gc6DUfjNCvUnapzEqZm0+yMM0BYxZm1IzALoZyXqOaoXdi2+LILZgdnS+3ACkGekceqjWbdhsag88halPqXY1gDxySC0wUaXrTIj6BZKr2Xzy3+YA3K1PsrBQoWDVb0YFXo6aw6f+EE/jq0/6QxfVGUwyMe2EkPKhT0kb4cmM7iSjMSozyLJv3cSCFMY7SqJI8GQNTiTrLqpi6dl7ARMvZo2St73gJdAcOnqOyqwvBX667RyS+2bdhWTGNZucJKiOYeGHgd6k1DZQGtcdOrM1FLC6S0reOkHJ0Gx6kxgKGFe+zKYmSvOZQ0fPocCgT+m0MPBD0ia91RjVGy/7fLLbAX5aR3s6tR4q1zpubUoN/JJopKPFJqrWOXuU3hITP+WRz714oGpu2qeUdQf4xbr2yeYlQcVa75R8/YHfzM3MtrUGqtagZK+O+FNrptXqLioWTPZ88pcu/sW9dBJULH9rUxI9/FeIihnH75T8aQjVrI83vgxzC6oFHx6l1bQF1QbrPqWsMYBqYfKdkr9IoV5EyXtvQL0GJUeru1AuZWkXQ7me4IvoQTkjYymFckaNpQbUq7GkmVCuwdIkMKBaylJ/HUC1nuCLPw2g2HiesTTsWFCrtzmwFG1aUCvpTliKYEKt0a3OUg2qjRoLvrTbBhRzFwuPUraNoVartd3ZlLRtALXcje45lDK9C7VGRYOlfpFCLXdR9yiJZieAUklSu9uUTqeHAaVGRZ2l9iKAUr3edskX73DpQKlH91vTobRr53MoFI47s4ylpZ5DodC9rL8JSnb7fR1DoXFcX3oszd6SFpSxRvGxLhxKTV+fGlCmhaL4nvHF7utTI4QilpV0dU1wT9LhbtfZQJWWMS2W77Qp+X29mMOEEta8NzyfhGNTEoeoMFwoEJrjXqo3DhPalGyxPD/GIf5WksCECRMlE61Rso7P0/u7ECyJg66P5jDxt+LGbHhbB904H82D3nUzvX4s6tru4LHk+dpkuBm0TPw9a6p5XibuWW21qi9PK+/OzLYdPjmO53ur3frozlGN8NHImsJ2bDrc8zeHTbHQ9HN3MDZRmTAdfNxW2/62eRdS29aaK205e/voBrEbomKW1XI7eRFE3eijMdQ7UV4kc8NIYEKZEC6SMAxh4sv/2T8XLefQYLd95QAAAABJRU5ErkJggg==\');\n background-size: 100%;\n }\n .m-share-tips-bottom {\n font-family: "PingFang SC",Arial,"\\5FAE\\8F6F\\96C5\\9ED1",Helvetica,sans-serif;\n margin: 0;\n padding: 0;\n font-size: 18px;\n position: fixed;\n color: #fff;\n top: 50%;\n left: 50%;\n width: 100%;\n z-index: 2147483647;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n text-align: center;\n width: 240px;\n line-height: 1.72;\n }\n\n @font-face {font-family: "m-share-iconfont";\n src: url(\'data:application/x-font-ttf;charset=utf-8;base64,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\') format(\'truetype\'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/\n }\n .m-share-iconfont {\n font-family:"m-share-iconfont" !important;\n font-size:26px;\n font-style:normal;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n padding: 5px;\n margin:0 0 0 10px;\n }\n .m-share-iconfont:first-child {\n margin: 0;\n }\n .m-share-iconfont-wx {\n color: #7bc549;\n border: 1px solid #7bc549;\n border-radius: 100%;\n }\n .m-share-iconfont-wx:active {\n background: #7bc549;\n color: #fff;\n }\n .m-share-iconfont-wx:before {\n content: "\\e61e";\n }\n .m-share-iconfont-sina {\n color: #ff763b;\n border: 1px solid #ff763b;\n border-radius: 100%;\n }\n .m-share-iconfont-sina:active {\n background: #ff763b;\n color: #fff;\n }\n .m-share-iconfont-sina:before {\n content: "\\e641";\n }\n .m-share-iconfont-qzone {\n color: #fdbe3d;\n border: 1px solid #fdbe3d;\n border-radius: 100%;\n }\n .m-share-iconfont-qzone:active {\n background: #fdbe3d;\n color: #fff;\n }\n .m-share-iconfont-qzone:before {\n content: "\\e728";\n }\n .m-share-iconfont-qq {\n color: #56b6e7;\n border: 1px solid #56b6e7;\n border-radius: 100%;\n }\n .m-share-iconfont-qq:active {\n background: #56b6e7;\n color: #fff;\n }\n .m-share-iconfont-qq:before {\n content: "\\e630";\n }\n .m-share-iconfont-wxline {\n color: #33b045;\n border: 1px solid #33b045;\n border-radius: 100%;\n }\n .m-share-iconfont-wxline:active {\n background: #33b045;\n color: #fff;\n }\n .m-share-iconfont-wxline:before {\n content: "\\e6e9";\n }\n .m-share-iconfont-menu {\n font-size: 12px;\n }\n .m-share-iconfont-menu:before {\n content: "\\e67e";\n }\n .m-share-iconfont-dots {\n font-size: 25px;\n color: #fff;\n }\n .m-share-iconfont-dots:before {\n content: "\\e656";\n }\n .m-share-iconfont-share {\n font-size: 17px;\n color: #fff;\n margin: 0;\n }\n .m-share-iconfont-share:before {\n content: "\\e6ae";\n }\n '};var isStyleLoaded=false;var ui={initStyle:function initStyle(){if(!isStyleLoaded){util.execStyle(style.cssText);isStyleLoaded=true}},showActionSheet:function showActionSheet(dom){this.showMask();var $sheet=document.createElement("div");$sheet.id="m-share-actionSheet";$sheet.appendChild(dom);document.body.appendChild($sheet);window.setTimeout(function(){$sheet.style.cssText="-webkit-transform: translateY(0);transform: translateY(0);"},0)},hideActionSheet:function hideActionSheet(){var dom=document.querySelector("#m-share-actionSheet");if(dom){dom.remove()}},showMask:function showMask(){var _this=this;if(document.querySelector(".m-share-mask")){return}var $div=document.createElement("div");$div.className="m-share-mask";$div.addEventListener("click",function(){_this.hideActionSheet();_this.hideBottomTips();_this.hideRightTips();_this.hideMask()});document.body.appendChild($div);window.setTimeout(function(){$div.style.opacity=.7},0)},hideMask:function hideMask(){var domList=document.querySelectorAll(".m-share-mask");var _loop=function _loop(i){var item=domList[i];var removeDom=function removeDom(){return item.remove()};removeDom()};for(var i=0;i