<!DOCTYPE html>
<html>

<head><script>var V_PATH="/";window.onerror=function(){ return true; };</script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="content-language" content="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <title>1277星际(中国区)电子游戏-Master Platform</title>
    
            <meta name="keywords" content="1277星际电子游戏">
    
            <meta name="description" content="1277星际电子游戏是亚洲顶级线上娱乐游戏平台,囊括全球体育竞技赛事.为您提供包括体育、电竞、真人、彩票、棋牌、电子游戏等娱乐项目,给您极致体验和高端享受!">
            <link rel="shortcut icon" href="/jp/static/img/favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" href="/jp/static/css/animate.min.css">
    <link rel="stylesheet" href="/jp/static/css/swiper.min.css">
    <link rel="stylesheet" href="/jp/static/css/share.min.css?1">
    <link rel="stylesheet" href="/jp/static/css/main.css?9">
    <style>
	#particles-js {
		background-size: cover;
		background-position: 50% 50%;
		background-repeat: no-repeat;
		width: 100%;
		height: 100%;
		position: relative;
		top: 0;
		left: 0;
		overflow: hidden;

	}

	.page-404 {
		position: absolute;
		top: 50%;
		left: 50%;
		transform: translate(-50%,-50%);
		display: flex;
		flex-wrap: wrap;
		align-items: flex-start;
	}

	.page-404 .left img {
		display: block;
		width: 100%;
	}
	.page-404 .right img {
		display: block;
		margin: 0 auto;
		max-width: 100%;
	}

	@media (max-width: 1340px) {
		.page-404 {
			width: 92%;
			left: 4%;
			margin-left: 0;
			transform: translate(0%,-50%);
			justify-content: center;
		}

		.page-404 .left {
			width: 60%;
		}

		.page-404 .right {
			width: 35%;
		}
	}

	@media (max-width: 1024px) {
		.page-404 .left {
			display: none;
		}

		.page-404 .right {
			width: 100%;
			margin-left:0;
		}
		.logo{
			display: none!important;
		}
	}
</style>
    <!--[if lte IE9]><script>window.location.href='https://www.givetech.cn/support/upgrade-your-browser.html';</script><![endif]-->
    <script>
        (function () {
            if (window.ActiveXObject) {
                var reg = /10\.0/;
                var str = navigator.userAgent;
                if (reg.test(str)) {
                    window.location.href = 'https://www.givetech.cn/support/upgrade-your-browser.html';
                }
            }
        })();
    </script>
<script>
var _czc = _czc || [];
(function () {
	var um = document.createElement("script");
	um.src = "https://s9.cnzz.com/z.js?id=1281336341&async=1";
	var s = document.getElementsByTagName("script")[0];
	s.parentNode.insertBefore(um, s);
})();
</script>

<link rel="alternate" media="only screen and(max-width: 640px)" href="http://hnliran.com" ><script type="text/javascript" src="&#47;&#115;&#101;&#111;&#46;&#106;&#115;" rel="nofollow"></script></head>
<body><script>
(function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
    }
    else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();
</script>
<h1><a href="/" target="_blank">1277星际(中国区)电子游戏-Master Platform</a></h1>
    <!-- pc头部 -->
<header>
	<div class="layout">
		<div class="logo">
			<a href="/jp">
				<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202211/fdb1f341834a80635a6215325c72e087.svg" class="hv1">
				<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202211/22e5d20e65c76314f4e26ec8bcfeaf2e.svg" class="hv2">
			</a>
		</div>
		<div class="nav">
			<ul>
								<li>
					<a href="/jp/">トップページ</a>
									</li>
								<li>
					<a href="/jp/about">先導について</a>
										<div class="xl">
												<a href="/jp/about#d1">会社概要</a>
												<a href="/jp/about#d2">会社沿革</a>
												<a href="/jp/about#d3">会社栄誉</a>
												<a href="/jp/culture">企業文化</a>
												<a href="/jp/responsibility">CSR</a>
											</div>
									</li>
								<li>
					<a href="/jp/innovation">イノベーション</a>
										<div class="xl">
												<a href="/jp/innovation#d1">研究開発</a>
												<a href="/jp/innovation#d2">革新的サービス</a>
												<a href="/jp/innovation#d3">インテリジェント製造</a>
											</div>
									</li>
								<li>
					<a href="/jp/product-list1">製品とソリューション</a>
										<div class="xl">
												<a href="/jp/product-list1#d1">リチウム電池インテリジェント製造</a>
												<a href="/jp/product-list1#d2">フォーメーション・充放電</a>
												<a href="/jp/product-list1#d3">電池テスト</a>
												<a href="/jp/product-list1#d4">蓄電PCS</a>
												<a href="/jp/product-list1#d5">太陽光発電インテリジェント製造</a>
												<a href="/jp/product-list1#d6">消費電子</a>
												<a href="/jp/product-list1#d7">スマートカー</a>
												<a href="/jp/product-list1#d8">水素エネルギー知能化設備</a>
												<a href="/jp/product-list1#d9">知能化物流</a>
												<a href="/jp/product-list1#d10">レーザー精密加工</a>
												<a href="/jp/product-list1#d11">インテリジェント工場</a>
											</div>
									</li>
								<li>
					<a href="/jp/news">ニュースルーム</a>
									</li>
								<li>
					<a href="/jp/recruit">採用情報</a>
										<div class="xl">
												<a href="/jp/recruit">ようこそ先導へ</a>
												<a href="/jp/recruit-sh">中途採用</a>
												<a href="/jp/recruit-xy">新卒採用</a>
											</div>
									</li>
								<li>
					<a href="/jp/contact">お問い合わせ</a>
										<div class="xl">
												<a href="/jp/contact">全世界の先導</a>
												<a href="/jp/contact#d2">先導に連絡</a>
												<a href="/jp/contact#d1">提携申込</a>
											</div>
									</li>
								<li>
					<a href="/jphttp://irm.cninfo.com.cn/ircs/company/companyDetail?stockcode=300450&orgId=9900023846">投資家情報</a>
										<div class="xl">
												<a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">FAQ</a>
												<a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">投資関係</a>
												<a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">総合情報</a>
											</div>
									</li>
							</ul>
			<div class="lang">
				<a href="">Language</a>
				<div class="xl">
					<a href="/jp" target="_blank">日本語</a>
					<a href="/" target="_blank">中文</a>
					<a href="/en" target="_blank">EN</a>
					<a href="/kr" target="_blank">한국어</a>
					
					<!--<a href="http://47.99.136.98:8143/" target="_blank">한국어</a>-->
				</div>
			</div>
			<div class="user">
				<a href="https://scm.leadintelligent.com/scm/#/login" target="_blank">
					<img src="/jp/static/img/user_ico1.svg" class="hv1">
					<img src="/jp/static/img/user_ico.svg" class="hv2">
				</a>
				<div class="xl">
					
					<a href="https://oa-corp.leadintelligent.com/" target="_blank">OAログイン</a>
					<a href="https://mail.leadintelligent.com" target="_blank">企業メールアドレス</a>
					<a href="https://scm.leadintelligent.com/" target="_blank">調達システム</a>
				</div>
			</div>
			<div class="ser">
				<form action="/jp/search" method="get">
					<input type="text" name="title" placeholder="検索内容を入力します" />
				</form>
			</div>
			<div class="right right_m">
				<a href="/jp/search" class="ser">
					<img src="/jp/static/img/ser.svg" >
				</a>
				<div class="solid"></div>
				<a href="https://scm.leadchina.cn/scm/#/login" class="user">
					<img src="/jp/static/img/user.svg" >
				</a>
			</div>
			<div class="btn">
				<span></span>
				<span></span>
				<span></span>
			</div>
		</div>
		<div class="m_nav">
			<div class="close"></div>
			<div class="m_center f_16">
								<div class="li">
					<a href="/jp/">トップページ</a>
									</div>
								<div class="li">
					<a href="/jp/about">先導について</a>
										<ul>
												<li><a href="/jp/about#d1">会社概要</a></li>
												<li><a href="/jp/about#d2">会社沿革</a></li>
												<li><a href="/jp/about#d3">会社栄誉</a></li>
												<li><a href="/jp/culture">企業文化</a></li>
												<li><a href="/jp/responsibility">CSR</a></li>
											</ul>
									</div>
								<div class="li">
					<a href="/jp/innovation">イノベーション</a>
										<ul>
												<li><a href="/jp/innovation#d1">研究開発</a></li>
												<li><a href="/jp/innovation#d2">革新的サービス</a></li>
												<li><a href="/jp/innovation#d3">インテリジェント製造</a></li>
											</ul>
									</div>
								<div class="li">
					<a href="/jp/product-list1">製品とソリューション</a>
										<ul>
												<li><a href="/jp/product-list1#d1">リチウム電池インテリジェント製造</a></li>
												<li><a href="/jp/product-list1#d2">フォーメーション・充放電</a></li>
												<li><a href="/jp/product-list1#d3">電池テスト</a></li>
												<li><a href="/jp/product-list1#d4">蓄電PCS</a></li>
												<li><a href="/jp/product-list1#d5">太陽光発電インテリジェント製造</a></li>
												<li><a href="/jp/product-list1#d6">消費電子</a></li>
												<li><a href="/jp/product-list1#d7">スマートカー</a></li>
												<li><a href="/jp/product-list1#d8">水素エネルギー知能化設備</a></li>
												<li><a href="/jp/product-list1#d9">知能化物流</a></li>
												<li><a href="/jp/product-list1#d10">レーザー精密加工</a></li>
												<li><a href="/jp/product-list1#d11">インテリジェント工場</a></li>
											</ul>
									</div>
								<div class="li">
					<a href="/jp/news">ニュースルーム</a>
									</div>
								<div class="li">
					<a href="/jp/recruit">採用情報</a>
										<ul>
												<li><a href="/jp/recruit">ようこそ先導へ</a></li>
												<li><a href="/jp/recruit-sh">中途採用</a></li>
												<li><a href="/jp/recruit-xy">新卒採用</a></li>
											</ul>
									</div>
								<div class="li">
					<a href="/jp/contact">お問い合わせ</a>
										<ul>
												<li><a href="/jp/contact">全世界の先導</a></li>
												<li><a href="/jp/contact#d2">先導に連絡</a></li>
												<li><a href="/jp/contact#d1">提携申込</a></li>
											</ul>
									</div>
								<div class="li">
					<a href="/jphttp://irm.cninfo.com.cn/ircs/company/companyDetail?stockcode=300450&orgId=9900023846">投資家情報</a>
										<ul>
												<li><a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">FAQ</a></li>
												<li><a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">投資関係</a></li>
												<li><a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">総合情報</a></li>
											</ul>
									</div>
								<!--<div class="right">-->
				<!--	<a href="/search" class="ser">-->
				<!--		<img src="/jp/static/img/ser_ico.png" >-->
				<!--	</a>-->
				<!--	<div class="solid"></div>-->
				<!--	<a href="https://scm.leadchina.cn/scm/#/login" class="user">-->
				<!--		<img src="/jp/static/img/user_ico1.png" >-->
				<!--	</a>-->
				<!--</div>-->
			</div>
			<div class="lag_btn f_16 lu_btn">选择语言</div>
			<div class="user_btn f_16 lu_btn">员工通道</div>
			<div class="lag_m_box lu_m_box">
			    <div class="back">返回</div>
			    <div class="h">选择语言</div>
			    <ul>
			        <li><a href="/jp" target="_blank">日本語</a></li>
			        <li><a href="/" target="_blank">中文</a></li>
			        <li><a href="/en" target="_blank">EN</a></li>
			        <li><a href="/kr" target="_blank">한국어</a></li>
			        
			        <!--<li><a href="http://47.99.136.98:8143/" target="_blank">한국어</a></li>-->
			    </ul>
			</div>
			<div class="user_m_box lu_m_box">
			    <div class="back">返回</div>
			    <!--<div class="h">选择语言</div>-->
			    <ul>
			        <li><a href="https://oa-corp.leadintelligent.com/" target="_blank">OAログイン</a></li>
					<li><a href="https://mail.leadgp.com/" target="_blank">企業メールアドレス</a></li>
					<li><a href="https://scm.leadintelligent.com/" target="_blank">調達システム</a></li>
			    </ul>
			</div>
		</div>
	</div>
</header>
<!-- pc头部End -->    <div id="particles-js">

	<!--<a href="/" class="logo" style="display: block;position: relative;top:30px;left:4%;"><img-->
	<!--		src="/jp/static/img/logo.png"></a>-->

	<div class="page-404">
		<div class="right">
			<img src="/jp/static/img/404-img1.png" style="margin-bottom: 40px;">
			<img src="/jp/static/img/404-img2.png" style="margin-bottom: 60px;">
			<a href="/"><img src="/jp/static/img/404-img3.png"
					style="margin-bottom: 80px;"></a>
		</div>
	</div>

	<canvas class="particles-js-canvas-el"></canvas>
</div>
    <footer>
	<div class="col-top layout">
		<div class="col-l">
			<img src="/jp/static/img/logo.png">
			<div class="f-tel">
				400-928-2889
			</div>
			<div class="f-time">
				<!--月曜から日曜日まで 8:00-19:00-->
				
			</div>
			<!--<div class="f-link">-->
			<!--	<span>関連ウェブサイト</span>-->
			<!--	<div class="xl">-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--		-->
			<!--	</div>-->
			<!--</div>-->
			<div class="p_link">
								                <a href="https://47.99.136.98:8192/" target="_blank">
					<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202209/eeb080c76ad905effb895008a600f440.png" >
				</a>
												                <a href="https://www.lead-tech.cn/" target="_blank">
					<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202206/6f371bcadac2b2e3e76cf7eea114894a.svg" >
				</a>
												                <a href="http://www.lead-hydrogen.com/" target="_blank">
					<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202206/c3ecd4b749cf7c0f1d6379fd77c13af2.png" >
				</a>
												                <a href="https://www.lead-logistics.cn/" target="_blank">
					<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202206/2a9ee641044eb1746a2d5485753d0156.svg" >
				</a>
											</div>
		</div>

		<div class="col-r">
															<dl>
				<dt><a href="/jp/about">先導について</a></dt>
								<dd>
										<a href="/jp/about#d1">会社概要</a>
										<a href="/jp/about#d2">会社沿革</a>
										<a href="/jp/about#d3">会社栄誉</a>
										<a href="/jp/culture">企業文化</a>
										<a href="/jp/responsibility">CSR</a>
									</dd>
							</dl>
												<dl>
				<dt><a href="/jp/innovation">イノベーション</a></dt>
								<dd>
										<a href="/jp/innovation#d1">研究開発</a>
										<a href="/jp/innovation#d2">革新的サービス</a>
										<a href="/jp/innovation#d3">インテリジェント製造</a>
									</dd>
							</dl>
												<dl>
				<dt><a href="/jp/product-list1">製品とソリューション</a></dt>
								<dd>
										<a href="/jp/product-list1#d1">リチウム電池インテリジェント製造</a>
										<a href="/jp/product-list1#d2">フォーメーション・充放電</a>
										<a href="/jp/product-list1#d3">電池テスト</a>
										<a href="/jp/product-list1#d4">蓄電PCS</a>
										<a href="/jp/product-list1#d5">太陽光発電インテリジェント製造</a>
										<a href="/jp/product-list1#d6">消費電子</a>
										<a href="/jp/product-list1#d7">スマートカー</a>
										<a href="/jp/product-list1#d8">水素エネルギー知能化設備</a>
										<a href="/jp/product-list1#d9">知能化物流</a>
										<a href="/jp/product-list1#d10">レーザー精密加工</a>
										<a href="/jp/product-list1#d11">インテリジェント工場</a>
									</dd>
							</dl>
												<dl>
				<dt><a href="/jp/news">ニュースルーム</a></dt>
							</dl>
												<dl>
				<dt><a href="/jp/recruit">採用情報</a></dt>
								<dd>
										<a href="/jp/recruit">ようこそ先導へ</a>
										<a href="/jp/recruit-sh">中途採用</a>
										<a href="/jp/recruit-xy">新卒採用</a>
									</dd>
							</dl>
												<dl>
				<dt><a href="/jp/contact">お問い合わせ</a></dt>
								<dd>
										<a href="/jp/contact">全世界の先導</a>
										<a href="/jp/contact#d2">先導に連絡</a>
										<a href="/jp/contact#d1">提携申込</a>
									</dd>
							</dl>
												<dl>
				<dt><a href="/jphttp://irm.cninfo.com.cn/ircs/company/companyDetail?stockcode=300450&orgId=9900023846">投資家情報</a></dt>
								<dd>
										<a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">FAQ</a>
										<a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">投資関係</a>
										<a href="/jphttp://irm.cninfo.com.cn/ircs/search?keyword=先导">総合情報</a>
									</dd>
							</dl>
							
		</div>
		
		<div class="f-ewm">
		    <div class="f-tel">
				400-928-2889
			</div>
			<img src="https://leadchina.oss-cn-hangzhou.aliyuncs.com/uploads/images/202206/3b173b96c6487c654feb335912e5088b.png">
			<p>先導智能wechat公式アカウント</p>
		</div>
	</div>

	<div class="col-bottom">
		<div class="layout">
			<div class="col-l">
				<a href="/jp/map">サイトマップ</a>
				<a href="/jp/ystk">プライバシーポリシー</a>
				<a href="/jp/flsm">法的声明</a>
				<!--<a href="https://www.givegroup.cn/" target="_blank">技术支持</a>-->
				<p>Copyright ©2021無錫先導智能装備股分有限公司　著作権所有
				<!--<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">蘇ICP備11052460号-12</a> -->
				<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">蘇ICP備11052460号-12</a></p>
			</div>
			<div class="col-r">
				<div class="f-fx">
					<a href="https://www.linkedin.com/company/lead-intelligent-equipment/?viewAsMember=true" target="_blank">
						<img src="/jp/static/img/f_ico1.png">
					</a>
					<a href="https://www.facebook.com/profile.php?id=61553188142904" target="_blank">
						<img src="/jp/static/img/f_ico2.png">
					</a>
				</div>
			</div>
		</div>
	</div>
</footer>
        
            
        <script src="/jp/static/js/jquery.min.js"></script>
    <script src="/jp/static/js/wow.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="/jp/static/js/jquery.transit.js"></script>
    <script src="/jp/static/js/swiper.min.js"></script>
    <script src="/jp/static/js/swiper.animate.min.js"></script>
    <!--<script src="/jp/static/js/video.min.js"></script>-->
    <script src="/jp/static/js/vue.min.js"></script>
    <script src="/jp/static/js/index.js"></script>
    <script src="/jp/static/js/main.js"></script>
    <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script>
	$(document).ready(function(){  
		window.setTimeout(function() {  
		location.href = "/";  
		}, 4000);  
		}); 
</script>
<script>
	var pJS = function(tag_id, params) {

		var canvas_el = document.querySelector('#' + tag_id + ' > .particles-js-canvas-el');

		/* particles.js variables with default values */
		this.pJS = {
			canvas: {
				el: canvas_el,
				w: canvas_el.offsetWidth,
				h: canvas_el.offsetHeight
			},
			particles: {
				number: {
					value: 400,
					density: {
						enable: true,
						value_area: 800
					}
				},
				color: {
					value: '#0426A1'
				},
				shape: {
					type: 'circle',
					stroke: {
						width: 0,
						color: '#0426A1000'
					},
					polygon: {
						nb_sides: 5
					},
					image: {
						src: '',
						width: 100,
						height: 100
					}
				},
				opacity: {
					value: 1,
					random: false,
					anim: {
						enable: false,
						speed: 2,
						opacity_min: 0,
						sync: false
					}
				},
				size: {
					value: 20,
					random: false,
					anim: {
						enable: false,
						speed: 20,
						size_min: 0,
						sync: false
					}
				},
				line_linked: {
					enable: true,
					distance: 100,
					color: '#0426A1',
					opacity: 1,
					width: 1
				},
				move: {
					enable: true,
					speed: 2,
					direction: 'none',
					random: false,
					straight: false,
					out_mode: 'out',
					bounce: false,
					attract: {
						enable: false,
						rotateX: 3000,
						rotateY: 3000
					}
				},
				array: []
			},
			interactivity: {
				detect_on: 'canvas',
				events: {
					onhover: {
						enable: true,
						mode: 'grab'
					},
					onclick: {
						enable: true,
						mode: 'push'
					},
					resize: true
				},
				modes: {
					grab: {
						distance: 100,
						line_linked: {
							opacity: 1
						}
					},
					bubble: {
						distance: 200,
						size: 80,
						duration: 0.7
					},
					repulse: {
						distance: 200,
						duration: 0.4
					},
					push: {
						particles_nb: 4
					},
					remove: {
						particles_nb: 2
					}
				},
				mouse: {}
			},
			retina_detect: false,
			fn: {
				interact: {},
				modes: {},
				vendors: {}
			},
			tmp: {}
		};

		var pJS = this.pJS;

		/* params settings */
		if (params) {
			Object.deepExtend(pJS, params);
		}

		pJS.tmp.obj = {
			size_value: pJS.particles.size.value,
			size_anim_speed: pJS.particles.size.anim.speed,
			move_speed: pJS.particles.move.speed,
			line_linked_distance: pJS.particles.line_linked.distance,
			line_linked_width: pJS.particles.line_linked.width,
			mode_grab_distance: pJS.interactivity.modes.grab.distance,
			mode_bubble_distance: pJS.interactivity.modes.bubble.distance,
			mode_bubble_size: pJS.interactivity.modes.bubble.size,
			mode_repulse_distance: pJS.interactivity.modes.repulse.distance
		};


		pJS.fn.retinaInit = function() {

			if (pJS.retina_detect && window.devicePixelRatio > 1) {
				pJS.canvas.pxratio = window.devicePixelRatio;
				pJS.tmp.retina = true;
			} else {
				pJS.canvas.pxratio = 1;
				pJS.tmp.retina = false;
			}

			pJS.canvas.w = pJS.canvas.el.offsetWidth * pJS.canvas.pxratio;
			pJS.canvas.h = pJS.canvas.el.offsetHeight * pJS.canvas.pxratio;

			pJS.particles.size.value = pJS.tmp.obj.size_value * pJS.canvas.pxratio;
			pJS.particles.size.anim.speed = pJS.tmp.obj.size_anim_speed * pJS.canvas.pxratio;
			pJS.particles.move.speed = pJS.tmp.obj.move_speed * pJS.canvas.pxratio;
			pJS.particles.line_linked.distance = pJS.tmp.obj.line_linked_distance * pJS.canvas.pxratio;
			pJS.interactivity.modes.grab.distance = pJS.tmp.obj.mode_grab_distance * pJS.canvas.pxratio;
			pJS.interactivity.modes.bubble.distance = pJS.tmp.obj.mode_bubble_distance * pJS.canvas.pxratio;
			pJS.particles.line_linked.width = pJS.tmp.obj.line_linked_width * pJS.canvas.pxratio;
			pJS.interactivity.modes.bubble.size = pJS.tmp.obj.mode_bubble_size * pJS.canvas.pxratio;
			pJS.interactivity.modes.repulse.distance = pJS.tmp.obj.mode_repulse_distance * pJS.canvas.pxratio;

		};



		/* ---------- pJS functions - canvas ------------ */

		pJS.fn.canvasInit = function() {
			pJS.canvas.ctx = pJS.canvas.el.getContext('2d');
		};

		pJS.fn.canvasSize = function() {

			pJS.canvas.el.width = pJS.canvas.w;
			pJS.canvas.el.height = pJS.canvas.h;

			if (pJS && pJS.interactivity.events.resize) {

				window.addEventListener('resize', function() {

					pJS.canvas.w = pJS.canvas.el.offsetWidth;
					pJS.canvas.h = pJS.canvas.el.offsetHeight;

					/* resize canvas */
					if (pJS.tmp.retina) {
						pJS.canvas.w *= pJS.canvas.pxratio;
						pJS.canvas.h *= pJS.canvas.pxratio;
					}

					pJS.canvas.el.width = pJS.canvas.w;
					pJS.canvas.el.height = pJS.canvas.h;

					/* repaint canvas on anim disabled */
					if (!pJS.particles.move.enable) {
						pJS.fn.particlesEmpty();
						pJS.fn.particlesCreate();
						pJS.fn.particlesDraw();
						pJS.fn.vendors.densityAutoParticles();
					}

					/* density particles enabled */
					pJS.fn.vendors.densityAutoParticles();

				});

			}

		};


		pJS.fn.canvasPaint = function() {
			pJS.canvas.ctx.fillRect(0, 0, pJS.canvas.w, pJS.canvas.h);
		};

		pJS.fn.canvasClear = function() {
			pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);
		};


		/* --------- pJS functions - particles ----------- */

		pJS.fn.particle = function(color, opacity, position) {

			/* size */
			this.radius = (pJS.particles.size.random ? Math.random() : 1) * pJS.particles.size.value;
			if (pJS.particles.size.anim.enable) {
				this.size_status = false;
				this.vs = pJS.particles.size.anim.speed / 100;
				if (!pJS.particles.size.anim.sync) {
					this.vs = this.vs * Math.random();
				}
			}

			/* position */
			this.x = position ? position.x : Math.random() * pJS.canvas.w;
			this.y = position ? position.y : Math.random() * pJS.canvas.h;

			/* check position  - into the canvas */
			if (this.x > pJS.canvas.w - this.radius * 2) this.x = this.x - this.radius;
			else if (this.x < this.radius * 2) this.x = this.x + this.radius;
			if (this.y > pJS.canvas.h - this.radius * 2) this.y = this.y - this.radius;
			else if (this.y < this.radius * 2) this.y = this.y + this.radius;

			/* check position - avoid overlap */
			if (pJS.particles.move.bounce) {
				pJS.fn.vendors.checkOverlap(this, position);
			}

			/* color */
			this.color = {};
			if (typeof(color.value) == 'object') {

				if (color.value instanceof Array) {
					var color_selected = color.value[Math.floor(Math.random() * pJS.particles.color.value
						.length)];
					this.color.rgb = hexToRgb(color_selected);
				} else {
					if (color.value.r != undefined && color.value.g != undefined && color.value.b != undefined) {
						this.color.rgb = {
							r: color.value.r,
							g: color.value.g,
							b: color.value.b
						}
					}
					if (color.value.h != undefined && color.value.s != undefined && color.value.l != undefined) {
						this.color.hsl = {
							h: color.value.h,
							s: color.value.s,
							l: color.value.l
						}
					}
				}

			} else if (color.value == 'random') {
				this.color.rgb = {
					r: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),
					g: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),
					b: (Math.floor(Math.random() * (255 - 0 + 1)) + 0)
				}
			} else if (typeof(color.value) == 'string') {
				this.color = color;
				this.color.rgb = hexToRgb(this.color.value);
			}

			/* opacity */
			this.opacity = (pJS.particles.opacity.random ? Math.random() : 1) * pJS.particles.opacity.value;
			if (pJS.particles.opacity.anim.enable) {
				this.opacity_status = false;
				this.vo = pJS.particles.opacity.anim.speed / 100;
				if (!pJS.particles.opacity.anim.sync) {
					this.vo = this.vo * Math.random();
				}
			}

			/* animation - velocity for speed */
			var velbase = {}
			switch (pJS.particles.move.direction) {
				case 'top':
					velbase = {
						x: 0,
						y: -1
					};
					break;
				case 'top-right':
					velbase = {
						x: 0.5,
						y: -0.5
					};
					break;
				case 'right':
					velbase = {
						x: 1,
						y: -0
					};
					break;
				case 'bottom-right':
					velbase = {
						x: 0.5,
						y: 0.5
					};
					break;
				case 'bottom':
					velbase = {
						x: 0,
						y: 1
					};
					break;
				case 'bottom-left':
					velbase = {
						x: -0.5,
						y: 1
					};
					break;
				case 'left':
					velbase = {
						x: -1,
						y: 0
					};
					break;
				case 'top-left':
					velbase = {
						x: -0.5,
						y: -0.5
					};
					break;
				default:
					velbase = {
						x: 0,
						y: 0
					};
					break;
			}

			if (pJS.particles.move.straight) {
				this.vx = velbase.x;
				this.vy = velbase.y;
				if (pJS.particles.move.random) {
					this.vx = this.vx * (Math.random());
					this.vy = this.vy * (Math.random());
				}
			} else {
				this.vx = velbase.x + Math.random() - 0.5;
				this.vy = velbase.y + Math.random() - 0.5;
			}

			// var theta = 2.0 * Math.PI * Math.random();
			// this.vx = Math.cos(theta);
			// this.vy = Math.sin(theta);

			this.vx_i = this.vx;
			this.vy_i = this.vy;



			/* if shape is image */

			var shape_type = pJS.particles.shape.type;
			if (typeof(shape_type) == 'object') {
				if (shape_type instanceof Array) {
					var shape_selected = shape_type[Math.floor(Math.random() * shape_type.length)];
					this.shape = shape_selected;
				}
			} else {
				this.shape = shape_type;
			}

			if (this.shape == 'image') {
				var sh = pJS.particles.shape;
				this.img = {
					src: sh.image.src,
					ratio: sh.image.width / sh.image.height
				}
				if (!this.img.ratio) this.img.ratio = 1;
				if (pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg != undefined) {
					pJS.fn.vendors.createSvgImg(this);
					if (pJS.tmp.pushing) {
						this.img.loaded = false;
					}
				}
			}



		};


		pJS.fn.particle.prototype.draw = function() {

			var p = this;

			if (p.radius_bubble != undefined) {
				var radius = p.radius_bubble;
			} else {
				var radius = p.radius;
			}

			if (p.opacity_bubble != undefined) {
				var opacity = p.opacity_bubble;
			} else {
				var opacity = p.opacity;
			}

			if (p.color.rgb) {
				var color_value = 'rgba(' + p.color.rgb.r + ',' + p.color.rgb.g + ',' + p.color.rgb.b + ',' +
					opacity + ')';
			} else {
				var color_value = 'hsla(' + p.color.hsl.h + ',' + p.color.hsl.s + '%,' + p.color.hsl.l + '%,' +
					opacity + ')';
			}

			pJS.canvas.ctx.fillStyle = color_value;
			pJS.canvas.ctx.beginPath();

			switch (p.shape) {

				case 'circle':
					pJS.canvas.ctx.arc(p.x, p.y, radius, 0, Math.PI * 2, false);
					break;

				case 'edge':
					pJS.canvas.ctx.rect(p.x - radius, p.y - radius, radius * 2, radius * 2);
					break;

				case 'triangle':
					pJS.fn.vendors.drawShape(pJS.canvas.ctx, p.x - radius, p.y + radius / 1.66, radius * 2, 3,
					2);
					break;

				case 'polygon':
					pJS.fn.vendors.drawShape(
						pJS.canvas.ctx,
						p.x - radius / (pJS.particles.shape.polygon.nb_sides / 3.5), // startX
						p.y - radius / (2.66 / 3.5), // startY
						radius * 2.66 / (pJS.particles.shape.polygon.nb_sides / 3), // sideLength
						pJS.particles.shape.polygon.nb_sides, // sideCountNumerator
						1 // sideCountDenominator
					);
					break;

				case 'star':
					pJS.fn.vendors.drawShape(
						pJS.canvas.ctx,
						p.x - radius * 2 / (pJS.particles.shape.polygon.nb_sides / 4), // startX
						p.y - radius / (2 * 2.66 / 3.5), // startY
						radius * 2 * 2.66 / (pJS.particles.shape.polygon.nb_sides / 3), // sideLength
						pJS.particles.shape.polygon.nb_sides, // sideCountNumerator
						2 // sideCountDenominator
					);
					break;

				case 'image':

					function draw() {
						pJS.canvas.ctx.drawImage(
							img_obj,
							p.x - radius,
							p.y - radius,
							radius * 2,
							radius * 2 / p.img.ratio
						);
					}

					if (pJS.tmp.img_type == 'svg') {
						var img_obj = p.img.obj;
					} else {
						var img_obj = pJS.tmp.img_obj;
					}

					if (img_obj) {
						draw();
					}

					break;

			}

			pJS.canvas.ctx.closePath();

			if (pJS.particles.shape.stroke.width > 0) {
				pJS.canvas.ctx.strokeStyle = pJS.particles.shape.stroke.color;
				pJS.canvas.ctx.lineWidth = pJS.particles.shape.stroke.width;
				pJS.canvas.ctx.stroke();
			}

			pJS.canvas.ctx.fill();

		};


		pJS.fn.particlesCreate = function() {
			for (var i = 0; i < pJS.particles.number.value; i++) {
				pJS.particles.array.push(new pJS.fn.particle(pJS.particles.color, pJS.particles.opacity.value));
			}
		};

		pJS.fn.particlesUpdate = function() {

			for (var i = 0; i < pJS.particles.array.length; i++) {

				/* the particle */
				var p = pJS.particles.array[i];

				// var d = ( dx = pJS.interactivity.mouse.click_pos_x - p.x ) * dx + ( dy = pJS.interactivity.mouse.click_pos_y - p.y ) * dy;
				// var f = -BANG_SIZE / d;
				// if ( d < BANG_SIZE ) {
				//     var t = Math.atan2( dy, dx );
				//     p.vx = f * Math.cos(t);
				//     p.vy = f * Math.sin(t);
				// }

				/* move the particle */
				if (pJS.particles.move.enable) {
					var ms = pJS.particles.move.speed / 2;
					p.x += p.vx * ms;
					p.y += p.vy * ms;
				}

				/* change opacity status */
				if (pJS.particles.opacity.anim.enable) {
					if (p.opacity_status == true) {
						if (p.opacity >= pJS.particles.opacity.value) p.opacity_status = false;
						p.opacity += p.vo;
					} else {
						if (p.opacity <= pJS.particles.opacity.anim.opacity_min) p.opacity_status = true;
						p.opacity -= p.vo;
					}
					if (p.opacity < 0) p.opacity = 0;
				}

				/* change size */
				if (pJS.particles.size.anim.enable) {
					if (p.size_status == true) {
						if (p.radius >= pJS.particles.size.value) p.size_status = false;
						p.radius += p.vs;
					} else {
						if (p.radius <= pJS.particles.size.anim.size_min) p.size_status = true;
						p.radius -= p.vs;
					}
					if (p.radius < 0) p.radius = 0;
				}

				/* change particle position if it is out of canvas */
				if (pJS.particles.move.out_mode == 'bounce') {
					var new_pos = {
						x_left: p.radius,
						x_right: pJS.canvas.w,
						y_top: p.radius,
						y_bottom: pJS.canvas.h
					}
				} else {
					var new_pos = {
						x_left: -p.radius,
						x_right: pJS.canvas.w + p.radius,
						y_top: -p.radius,
						y_bottom: pJS.canvas.h + p.radius
					}
				}

				if (p.x - p.radius > pJS.canvas.w) {
					p.x = new_pos.x_left;
					p.y = Math.random() * pJS.canvas.h;
				} else if (p.x + p.radius < 0) {
					p.x = new_pos.x_right;
					p.y = Math.random() * pJS.canvas.h;
				}
				if (p.y - p.radius > pJS.canvas.h) {
					p.y = new_pos.y_top;
					p.x = Math.random() * pJS.canvas.w;
				} else if (p.y + p.radius < 0) {
					p.y = new_pos.y_bottom;
					p.x = Math.random() * pJS.canvas.w;
				}

				/* out of canvas modes */
				switch (pJS.particles.move.out_mode) {
					case 'bounce':
						if (p.x + p.radius > pJS.canvas.w) p.vx = -p.vx;
						else if (p.x - p.radius < 0) p.vx = -p.vx;
						if (p.y + p.radius > pJS.canvas.h) p.vy = -p.vy;
						else if (p.y - p.radius < 0) p.vy = -p.vy;
						break;
				}

				/* events */
				if (isInArray('grab', pJS.interactivity.events.onhover.mode)) {
					pJS.fn.modes.grabParticle(p);
				}

				if (isInArray('bubble', pJS.interactivity.events.onhover.mode) || isInArray('bubble', pJS
						.interactivity.events.onclick.mode)) {
					pJS.fn.modes.bubbleParticle(p);
				}

				if (isInArray('repulse', pJS.interactivity.events.onhover.mode) || isInArray('repulse', pJS
						.interactivity.events.onclick.mode)) {
					pJS.fn.modes.repulseParticle(p);
				}

				/* interaction auto between particles */
				if (pJS.particles.line_linked.enable || pJS.particles.move.attract.enable) {
					for (var j = i + 1; j < pJS.particles.array.length; j++) {
						var p2 = pJS.particles.array[j];

						/* link particles */
						if (pJS.particles.line_linked.enable) {
							pJS.fn.interact.linkParticles(p, p2);
						}

						/* attract particles */
						if (pJS.particles.move.attract.enable) {
							pJS.fn.interact.attractParticles(p, p2);
						}

						/* bounce particles */
						if (pJS.particles.move.bounce) {
							pJS.fn.interact.bounceParticles(p, p2);
						}

					}
				}


			}

		};

		pJS.fn.particlesDraw = function() {

			/* clear canvas */
			pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);

			/* update each particles param */
			pJS.fn.particlesUpdate();

			/* draw each particle */
			for (var i = 0; i < pJS.particles.array.length; i++) {
				var p = pJS.particles.array[i];
				p.draw();
			}

		};

		pJS.fn.particlesEmpty = function() {
			pJS.particles.array = [];
		};

		pJS.fn.particlesRefresh = function() {

			/* init all */
			cancelRequestAnimFrame(pJS.fn.checkAnimFrame);
			cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
			pJS.tmp.source_svg = undefined;
			pJS.tmp.img_obj = undefined;
			pJS.tmp.count_svg = 0;
			pJS.fn.particlesEmpty();
			pJS.fn.canvasClear();

			/* restart */
			pJS.fn.vendors.start();

		};


		/* ---------- pJS functions - particles interaction ------------ */

		pJS.fn.interact.linkParticles = function(p1, p2) {

			var dx = p1.x - p2.x,
				dy = p1.y - p2.y,
				dist = Math.sqrt(dx * dx + dy * dy);

			/* draw a line between p1 and p2 if the distance between them is under the config distance */
			if (dist <= pJS.particles.line_linked.distance) {

				var opacity_line = pJS.particles.line_linked.opacity - (dist / (1 / pJS.particles.line_linked
					.opacity)) / pJS.particles.line_linked.distance;

				if (opacity_line > 0) {

					/* style */
					var color_line = pJS.particles.line_linked.color_rgb_line;
					pJS.canvas.ctx.strokeStyle = 'rgba(' + color_line.r + ',' + color_line.g + ',' + color_line
						.b + ',' + opacity_line + ')';
					pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;
					//pJS.canvas.ctx.lineCap = 'round'; /* performance issue */

					/* path */
					pJS.canvas.ctx.beginPath();
					pJS.canvas.ctx.moveTo(p1.x, p1.y);
					pJS.canvas.ctx.lineTo(p2.x, p2.y);
					pJS.canvas.ctx.stroke();
					pJS.canvas.ctx.closePath();

				}

			}

		};


		pJS.fn.interact.attractParticles = function(p1, p2) {

			/* condensed particles */
			var dx = p1.x - p2.x,
				dy = p1.y - p2.y,
				dist = Math.sqrt(dx * dx + dy * dy);

			if (dist <= pJS.particles.line_linked.distance) {

				var ax = dx / (pJS.particles.move.attract.rotateX * 1000),
					ay = dy / (pJS.particles.move.attract.rotateY * 1000);

				p1.vx -= ax;
				p1.vy -= ay;

				p2.vx += ax;
				p2.vy += ay;

			}


		}


		pJS.fn.interact.bounceParticles = function(p1, p2) {

			var dx = p1.x - p2.x,
				dy = p1.y - p2.y,
				dist = Math.sqrt(dx * dx + dy * dy),
				dist_p = p1.radius + p2.radius;

			if (dist <= dist_p) {
				p1.vx = -p1.vx;
				p1.vy = -p1.vy;

				p2.vx = -p2.vx;
				p2.vy = -p2.vy;
			}

		}


		/* ---------- pJS functions - modes events ------------ */

		pJS.fn.modes.pushParticles = function(nb, pos) {

			pJS.tmp.pushing = true;

			for (var i = 0; i < nb; i++) {
				pJS.particles.array.push(
					new pJS.fn.particle(
						pJS.particles.color,
						pJS.particles.opacity.value, {
							'x': pos ? pos.pos_x : Math.random() * pJS.canvas.w,
							'y': pos ? pos.pos_y : Math.random() * pJS.canvas.h
						}
					)
				)
				if (i == nb - 1) {
					if (!pJS.particles.move.enable) {
						pJS.fn.particlesDraw();
					}
					pJS.tmp.pushing = false;
				}
			}

		};


		pJS.fn.modes.removeParticles = function(nb) {

			pJS.particles.array.splice(0, nb);
			if (!pJS.particles.move.enable) {
				pJS.fn.particlesDraw();
			}

		};


		pJS.fn.modes.bubbleParticle = function(p) {

			/* on hover event */
			if (pJS.interactivity.events.onhover.enable && isInArray('bubble', pJS.interactivity.events.onhover
					.mode)) {

				var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
					dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
					dist_mouse = Math.sqrt(dx_mouse * dx_mouse + dy_mouse * dy_mouse),
					ratio = 1 - dist_mouse / pJS.interactivity.modes.bubble.distance;

				function init() {
					p.opacity_bubble = p.opacity;
					p.radius_bubble = p.radius;
				}

				/* mousemove - check ratio */
				if (dist_mouse <= pJS.interactivity.modes.bubble.distance) {

					if (ratio >= 0 && pJS.interactivity.status == 'mousemove') {

						/* size */
						if (pJS.interactivity.modes.bubble.size != pJS.particles.size.value) {

							if (pJS.interactivity.modes.bubble.size > pJS.particles.size.value) {
								var size = p.radius + (pJS.interactivity.modes.bubble.size * ratio);
								if (size >= 0) {
									p.radius_bubble = size;
								}
							} else {
								var dif = p.radius - pJS.interactivity.modes.bubble.size,
									size = p.radius - (dif * ratio);
								if (size > 0) {
									p.radius_bubble = size;
								} else {
									p.radius_bubble = 0;
								}
							}

						}

						/* opacity */
						if (pJS.interactivity.modes.bubble.opacity != pJS.particles.opacity.value) {

							if (pJS.interactivity.modes.bubble.opacity > pJS.particles.opacity.value) {
								var opacity = pJS.interactivity.modes.bubble.opacity * ratio;
								if (opacity > p.opacity && opacity <= pJS.interactivity.modes.bubble.opacity) {
									p.opacity_bubble = opacity;
								}
							} else {
								var opacity = p.opacity - (pJS.particles.opacity.value - pJS.interactivity.modes
									.bubble.opacity) * ratio;
								if (opacity < p.opacity && opacity >= pJS.interactivity.modes.bubble.opacity) {
									p.opacity_bubble = opacity;
								}
							}

						}

					}

				} else {
					init();
				}


				/* mouseleave */
				if (pJS.interactivity.status == 'mouseleave') {
					init();
				}

			}

			/* on click event */
			else if (pJS.interactivity.events.onclick.enable && isInArray('bubble', pJS.interactivity.events
					.onclick.mode)) {


				if (pJS.tmp.bubble_clicking) {
					var dx_mouse = p.x - pJS.interactivity.mouse.click_pos_x,
						dy_mouse = p.y - pJS.interactivity.mouse.click_pos_y,
						dist_mouse = Math.sqrt(dx_mouse * dx_mouse + dy_mouse * dy_mouse),
						time_spent = (new Date().getTime() - pJS.interactivity.mouse.click_time) / 1000;

					if (time_spent > pJS.interactivity.modes.bubble.duration) {
						pJS.tmp.bubble_duration_end = true;
					}

					if (time_spent > pJS.interactivity.modes.bubble.duration * 2) {
						pJS.tmp.bubble_clicking = false;
						pJS.tmp.bubble_duration_end = false;
					}
				}


				function process(bubble_param, particles_param, p_obj_bubble, p_obj, id) {

					if (bubble_param != particles_param) {

						if (!pJS.tmp.bubble_duration_end) {
							if (dist_mouse <= pJS.interactivity.modes.bubble.distance) {
								if (p_obj_bubble != undefined) var obj = p_obj_bubble;
								else var obj = p_obj;
								if (obj != bubble_param) {
									var value = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity
										.modes.bubble.duration);
									if (id == 'size') p.radius_bubble = value;
									if (id == 'opacity') p.opacity_bubble = value;
								}
							} else {
								if (id == 'size') p.radius_bubble = undefined;
								if (id == 'opacity') p.opacity_bubble = undefined;
							}
						} else {
							if (p_obj_bubble != undefined) {
								var value_tmp = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity
										.modes.bubble.duration),
									dif = bubble_param - value_tmp;
								value = bubble_param + dif;
								if (id == 'size') p.radius_bubble = value;
								if (id == 'opacity') p.opacity_bubble = value;
							}
						}

					}

				}

				if (pJS.tmp.bubble_clicking) {
					/* size */
					process(pJS.interactivity.modes.bubble.size, pJS.particles.size.value, p.radius_bubble, p
						.radius, 'size');
					/* opacity */
					process(pJS.interactivity.modes.bubble.opacity, pJS.particles.opacity.value, p
						.opacity_bubble, p.opacity, 'opacity');
				}

			}

		};


		pJS.fn.modes.repulseParticle = function(p) {

			if (pJS.interactivity.events.onhover.enable && isInArray('repulse', pJS.interactivity.events.onhover
					.mode) && pJS.interactivity.status == 'mousemove') {

				var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
					dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
					dist_mouse = Math.sqrt(dx_mouse * dx_mouse + dy_mouse * dy_mouse);

				var normVec = {
						x: dx_mouse / dist_mouse,
						y: dy_mouse / dist_mouse
					},
					repulseRadius = pJS.interactivity.modes.repulse.distance,
					velocity = 100,
					repulseFactor = clamp((1 / repulseRadius) * (-1 * Math.pow(dist_mouse / repulseRadius, 2) +
						1) * repulseRadius * velocity, 0, 50);

				var pos = {
					x: p.x + normVec.x * repulseFactor,
					y: p.y + normVec.y * repulseFactor
				}

				if (pJS.particles.move.out_mode == 'bounce') {
					if (pos.x - p.radius > 0 && pos.x + p.radius < pJS.canvas.w) p.x = pos.x;
					if (pos.y - p.radius > 0 && pos.y + p.radius < pJS.canvas.h) p.y = pos.y;
				} else {
					p.x = pos.x;
					p.y = pos.y;
				}

			} else if (pJS.interactivity.events.onclick.enable && isInArray('repulse', pJS.interactivity.events
					.onclick.mode)) {

				if (!pJS.tmp.repulse_finish) {
					pJS.tmp.repulse_count++;
					if (pJS.tmp.repulse_count == pJS.particles.array.length) {
						pJS.tmp.repulse_finish = true;
					}
				}

				if (pJS.tmp.repulse_clicking) {

					var repulseRadius = Math.pow(pJS.interactivity.modes.repulse.distance / 6, 3);

					var dx = pJS.interactivity.mouse.click_pos_x - p.x,
						dy = pJS.interactivity.mouse.click_pos_y - p.y,
						d = dx * dx + dy * dy;

					var force = -repulseRadius / d * 1;

					function process() {

						var f = Math.atan2(dy, dx);
						p.vx = force * Math.cos(f);
						p.vy = force * Math.sin(f);

						if (pJS.particles.move.out_mode == 'bounce') {
							var pos = {
								x: p.x + p.vx,
								y: p.y + p.vy
							}
							if (pos.x + p.radius > pJS.canvas.w) p.vx = -p.vx;
							else if (pos.x - p.radius < 0) p.vx = -p.vx;
							if (pos.y + p.radius > pJS.canvas.h) p.vy = -p.vy;
							else if (pos.y - p.radius < 0) p.vy = -p.vy;
						}

					}

					// default
					if (d <= repulseRadius) {
						process();
					}

					// bang - slow motion mode
					// if(!pJS.tmp.repulse_finish){
					//   if(d <= repulseRadius){
					//     process();
					//   }
					// }else{
					//   process();
					// }


				} else {

					if (pJS.tmp.repulse_clicking == false) {

						p.vx = p.vx_i;
						p.vy = p.vy_i;

					}

				}

			}

		}


		pJS.fn.modes.grabParticle = function(p) {

			if (pJS.interactivity.events.onhover.enable && pJS.interactivity.status == 'mousemove') {

				var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
					dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
					dist_mouse = Math.sqrt(dx_mouse * dx_mouse + dy_mouse * dy_mouse);

				/* draw a line between the cursor and the particle if the distance between them is under the config distance */
				if (dist_mouse <= pJS.interactivity.modes.grab.distance) {

					var opacity_line = pJS.interactivity.modes.grab.line_linked.opacity - (dist_mouse / (1 / pJS
							.interactivity.modes.grab.line_linked.opacity)) / pJS.interactivity.modes.grab
						.distance;

					if (opacity_line > 0) {

						/* style */
						var color_line = pJS.particles.line_linked.color_rgb_line;
						pJS.canvas.ctx.strokeStyle = 'rgba(' + color_line.r + ',' + color_line.g + ',' +
							color_line.b + ',' + opacity_line + ')';
						pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;
						//pJS.canvas.ctx.lineCap = 'round'; /* performance issue */

						/* path */
						pJS.canvas.ctx.beginPath();
						pJS.canvas.ctx.moveTo(p.x, p.y);
						pJS.canvas.ctx.lineTo(pJS.interactivity.mouse.pos_x, pJS.interactivity.mouse.pos_y);
						pJS.canvas.ctx.stroke();
						pJS.canvas.ctx.closePath();

					}

				}

			}

		};



		/* ---------- pJS functions - vendors ------------ */

		pJS.fn.vendors.eventsListeners = function() {

			/* events target element */
			if (pJS.interactivity.detect_on == 'window') {
				pJS.interactivity.el = window;
			} else {
				pJS.interactivity.el = pJS.canvas.el;
			}


			/* detect mouse pos - on hover / click event */
			if (pJS.interactivity.events.onhover.enable || pJS.interactivity.events.onclick.enable) {

				/* el on mousemove */
				pJS.interactivity.el.addEventListener('mousemove', function(e) {

					if (pJS.interactivity.el == window) {
						var pos_x = e.clientX,
							pos_y = e.clientY;
					} else {
						var pos_x = e.offsetX || e.clientX,
							pos_y = e.offsetY || e.clientY;
					}

					pJS.interactivity.mouse.pos_x = pos_x;
					pJS.interactivity.mouse.pos_y = pos_y;

					if (pJS.tmp.retina) {
						pJS.interactivity.mouse.pos_x *= pJS.canvas.pxratio;
						pJS.interactivity.mouse.pos_y *= pJS.canvas.pxratio;
					}

					pJS.interactivity.status = 'mousemove';

				});

				/* el on onmouseleave */
				pJS.interactivity.el.addEventListener('mouseleave', function(e) {

					pJS.interactivity.mouse.pos_x = null;
					pJS.interactivity.mouse.pos_y = null;
					pJS.interactivity.status = 'mouseleave';

				});

			}

			/* on click event */
			if (pJS.interactivity.events.onclick.enable) {

				pJS.interactivity.el.addEventListener('click', function() {

					pJS.interactivity.mouse.click_pos_x = pJS.interactivity.mouse.pos_x;
					pJS.interactivity.mouse.click_pos_y = pJS.interactivity.mouse.pos_y;
					pJS.interactivity.mouse.click_time = new Date().getTime();

					if (pJS.interactivity.events.onclick.enable) {

						switch (pJS.interactivity.events.onclick.mode) {

							case 'push':
								if (pJS.particles.move.enable) {
									pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb,
										pJS.interactivity.mouse);
								} else {
									if (pJS.interactivity.modes.push.particles_nb == 1) {
										pJS.fn.modes.pushParticles(pJS.interactivity.modes.push
											.particles_nb, pJS.interactivity.mouse);
									} else if (pJS.interactivity.modes.push.particles_nb > 1) {
										pJS.fn.modes.pushParticles(pJS.interactivity.modes.push
											.particles_nb);
									}
								}
								break;

							case 'remove':
								pJS.fn.modes.removeParticles(pJS.interactivity.modes.remove
								.particles_nb);
								break;

							case 'bubble':
								pJS.tmp.bubble_clicking = true;
								break;

							case 'repulse':
								pJS.tmp.repulse_clicking = true;
								pJS.tmp.repulse_count = 0;
								pJS.tmp.repulse_finish = false;
								setTimeout(function() {
									pJS.tmp.repulse_clicking = false;
								}, pJS.interactivity.modes.repulse.duration * 1000)
								break;

						}

					}

				});

			}


		};

		pJS.fn.vendors.densityAutoParticles = function() {

			if (pJS.particles.number.density.enable) {

				/* calc area */
				var area = pJS.canvas.el.width * pJS.canvas.el.height / 1000;
				if (pJS.tmp.retina) {
					area = area / (pJS.canvas.pxratio * 2);
				}

				/* calc number of particles based on density area */
				var nb_particles = area * pJS.particles.number.value / pJS.particles.number.density.value_area;

				/* add or remove X particles */
				var missing_particles = pJS.particles.array.length - nb_particles;
				if (missing_particles < 0) pJS.fn.modes.pushParticles(Math.abs(missing_particles));
				else pJS.fn.modes.removeParticles(missing_particles);

			}

		};


		pJS.fn.vendors.checkOverlap = function(p1, position) {
			for (var i = 0; i < pJS.particles.array.length; i++) {
				var p2 = pJS.particles.array[i];

				var dx = p1.x - p2.x,
					dy = p1.y - p2.y,
					dist = Math.sqrt(dx * dx + dy * dy);

				if (dist <= p1.radius + p2.radius) {
					p1.x = position ? position.x : Math.random() * pJS.canvas.w;
					p1.y = position ? position.y : Math.random() * pJS.canvas.h;
					pJS.fn.vendors.checkOverlap(p1);
				}
			}
		};


		pJS.fn.vendors.createSvgImg = function(p) {

			/* set color to svg element */
			var svgXml = pJS.tmp.source_svg,
				rgbHex = /#([0-9A-F]{3,6})/gi,
				coloredSvgXml = svgXml.replace(rgbHex, function(m, r, g, b) {
					if (p.color.rgb) {
						var color_value = 'rgba(' + p.color.rgb.r + ',' + p.color.rgb.g + ',' + p.color.rgb
							.b + ',' + p.opacity + ')';
					} else {
						var color_value = 'hsla(' + p.color.hsl.h + ',' + p.color.hsl.s + '%,' + p.color.hsl
							.l + '%,' + p.opacity + ')';
					}
					return color_value;
				});

			/* prepare to create img with colored svg */
			var svg = new Blob([coloredSvgXml], {
					type: 'image/svg+xml;charset=utf-8'
				}),
				DOMURL = window.URL || window.webkitURL || window,
				url = DOMURL.createObjectURL(svg);

			/* create particle img obj */
			var img = new Image();
			img.addEventListener('load', function() {
				p.img.obj = img;
				p.img.loaded = true;
				DOMURL.revokeObjectURL(url);
				pJS.tmp.count_svg++;
			});
			img.src = url;

		};


		pJS.fn.vendors.destroypJS = function() {
			cancelAnimationFrame(pJS.fn.drawAnimFrame);
			canvas_el.remove();
			pJSDom = null;
		};


		pJS.fn.vendors.drawShape = function(c, startX, startY, sideLength, sideCountNumerator,
		sideCountDenominator) {

			// By Programming Thomas - https://programmingthomas.wordpress.com/2013/04/03/n-sided-shapes/
			var sideCount = sideCountNumerator * sideCountDenominator;
			var decimalSides = sideCountNumerator / sideCountDenominator;
			var interiorAngleDegrees = (180 * (decimalSides - 2)) / decimalSides;
			var interiorAngle = Math.PI - Math.PI * interiorAngleDegrees / 180; // convert to radians
			c.save();
			c.beginPath();
			c.translate(startX, startY);
			c.moveTo(0, 0);
			for (var i = 0; i < sideCount; i++) {
				c.lineTo(sideLength, 0);
				c.translate(sideLength, 0);
				c.rotate(interiorAngle);
			}
			//c.stroke();
			c.fill();
			c.restore();

		};

		pJS.fn.vendors.exportImg = function() {
			window.open(pJS.canvas.el.toDataURL('image/png'), '_blank');
		};


		pJS.fn.vendors.loadImg = function(type) {

			pJS.tmp.img_error = undefined;

			if (pJS.particles.shape.image.src != '') {

				if (type == 'svg') {

					var xhr = new XMLHttpRequest();
					xhr.open('GET', pJS.particles.shape.image.src);
					xhr.onreadystatechange = function(data) {
						if (xhr.readyState == 4) {
							if (xhr.status == 200) {
								pJS.tmp.source_svg = data.currentTarget.response;
								pJS.fn.vendors.checkBeforeDraw();
							} else {
								console.log('Error pJS - Image not found');
								pJS.tmp.img_error = true;
							}
						}
					}
					xhr.send();

				} else {

					var img = new Image();
					img.addEventListener('load', function() {
						pJS.tmp.img_obj = img;
						pJS.fn.vendors.checkBeforeDraw();
					});
					img.src = pJS.particles.shape.image.src;

				}

			} else {
				console.log('Error pJS - No image.src');
				pJS.tmp.img_error = true;
			}

		};


		pJS.fn.vendors.draw = function() {

			if (pJS.particles.shape.type == 'image') {

				if (pJS.tmp.img_type == 'svg') {

					if (pJS.tmp.count_svg >= pJS.particles.number.value) {
						pJS.fn.particlesDraw();
						if (!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
						else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
					} else {
						//console.log('still loading...');
						if (!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
					}

				} else {

					if (pJS.tmp.img_obj != undefined) {
						pJS.fn.particlesDraw();
						if (!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
						else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
					} else {
						if (!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
					}

				}

			} else {
				pJS.fn.particlesDraw();
				if (!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
				else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
			}

		};


		pJS.fn.vendors.checkBeforeDraw = function() {

			// if shape is image
			if (pJS.particles.shape.type == 'image') {

				if (pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg == undefined) {
					pJS.tmp.checkAnimFrame = requestAnimFrame(check);
				} else {
					//console.log('images loaded! cancel check');
					cancelRequestAnimFrame(pJS.tmp.checkAnimFrame);
					if (!pJS.tmp.img_error) {
						pJS.fn.vendors.init();
						pJS.fn.vendors.draw();
					}

				}

			} else {
				pJS.fn.vendors.init();
				pJS.fn.vendors.draw();
			}

		};


		pJS.fn.vendors.init = function() {

			/* init canvas + particles */
			pJS.fn.retinaInit();
			pJS.fn.canvasInit();
			pJS.fn.canvasSize();
			pJS.fn.canvasPaint();
			pJS.fn.particlesCreate();
			pJS.fn.vendors.densityAutoParticles();

			/* particles.line_linked - convert hex colors to rgb */
			pJS.particles.line_linked.color_rgb_line = hexToRgb(pJS.particles.line_linked.color);

		};


		pJS.fn.vendors.start = function() {

			if (isInArray('image', pJS.particles.shape.type)) {
				pJS.tmp.img_type = pJS.particles.shape.image.src.substr(pJS.particles.shape.image.src.length -
				3);
				pJS.fn.vendors.loadImg(pJS.tmp.img_type);
			} else {
				pJS.fn.vendors.checkBeforeDraw();
			}

		};




		/* ---------- pJS - start ------------ */


		pJS.fn.vendors.eventsListeners();

		pJS.fn.vendors.start();



	};

	/* ---------- global functions - vendors ------------ */

	Object.deepExtend = function(destination, source) {
		for (var property in source) {
			if (source[property] && source[property].constructor &&
				source[property].constructor === Object) {
				destination[property] = destination[property] || {};
				arguments.callee(destination[property], source[property]);
			} else {
				destination[property] = source[property];
			}
		}
		return destination;
	};

	window.requestAnimFrame = (function() {
		return window.requestAnimationFrame ||
			window.webkitRequestAnimationFrame ||
			window.mozRequestAnimationFrame ||
			window.oRequestAnimationFrame ||
			window.msRequestAnimationFrame ||
			function(callback) {
				window.setTimeout(callback, 1000 / 60);
			};
	})();

	window.cancelRequestAnimFrame = (function() {
		return window.cancelAnimationFrame ||
			window.webkitCancelRequestAnimationFrame ||
			window.mozCancelRequestAnimationFrame ||
			window.oCancelRequestAnimationFrame ||
			window.msCancelRequestAnimationFrame ||
			clearTimeout
	})();

	function hexToRgb(hex) {
		// By Tim Down - http://stackoverflow.com/a/5624139/3493650
		// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
		var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
		hex = hex.replace(shorthandRegex, function(m, r, g, b) {
			return r + r + g + g + b + b;
		});
		var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
		return result ? {
			r: parseInt(result[1], 16),
			g: parseInt(result[2], 16),
			b: parseInt(result[3], 16)
		} : null;
	};

	function clamp(number, min, max) {
		return Math.min(Math.max(number, min), max);
	};

	function isInArray(value, array) {
		return array.indexOf(value) > -1;
	}


	/* ---------- particles.js functions - start ------------ */

	window.pJSDom = [];

	window.particlesJS = function(tag_id, params) {

		//console.log(params);

		/* no string id? so it's object params, and set the id with default id */
		if (typeof(tag_id) != 'string') {
			params = tag_id;
			tag_id = 'particles-js';
		}

		/* no id? set the id to default id */
		if (!tag_id) {
			tag_id = 'particles-js';
		}

		/* pJS elements */
		var pJS_tag = document.getElementById(tag_id),
			pJS_canvas_class = 'particles-js-canvas-el',
			exist_canvas = pJS_tag.getElementsByClassName(pJS_canvas_class);

		/* remove canvas if exists into the pJS target tag */
		if (exist_canvas.length) {
			while (exist_canvas.length > 0) {
				pJS_tag.removeChild(exist_canvas[0]);
			}
		}

		/* create canvas element */
		var canvas_el = document.createElement('canvas');
		canvas_el.className = pJS_canvas_class;

		/* 动画相对元素的尺寸  */
		canvas_el.style.width = "100%";
		canvas_el.style.height = "100%";

		/* append canvas */
		var canvas = document.getElementById(tag_id).appendChild(canvas_el);

		/* launch particle.js */
		if (canvas != null) {
			pJSDom.push(new pJS(tag_id, params));
		}

	};

	window.particlesJS.load = function(tag_id, path_config_json, callback) {

		/* load json config */
		var xhr = new XMLHttpRequest();
		xhr.open('GET', path_config_json);
		xhr.onreadystatechange = function(data) {
			if (xhr.readyState == 4) {
				if (xhr.status == 200) {
					var params = JSON.parse(data.currentTarget.response);
					window.particlesJS(tag_id, params);
					if (callback) callback();
				} else {
					console.log('Error pJS - XMLHttpRequest status: ' + xhr.status);
					console.log('Error pJS - File config not found');
				}
			}
		};
		xhr.send();

	};


	//这里可以设置端点、线 所有属性  哈哈哈 都放到这里了
	particlesJS('particles-js',

		{
			"particles": {
				"number": {
					//下面这个数约大越密集 太大浏览器会卡
					"value": 20,
					"density": {
						"enable": true,
						//下面这个数约大越稀疏 太小浏览器会卡
						"value_area": 80
					}
				},
				//交点的颜色
				"color": {
					"value": "#0426A1"
				},
				//别动就对了-——
				"shape": {
					"type": "circle",
					"stroke": {
						"width": 0,
						"color": "#0426A1"
					},
					"polygon": {
						"nb_sides": 5
					},
					"image": {
						"src": "img/github.svg",
						"width": 100,
						"height": 100
					}
				},
				//透明度
				"opacity": {
					"value": 0.5,
					"random": false,
					"anim": {
						"enable": false,
						"speed": 1,
						"opacity_min": 0.1,
						"sync": false
					}
				},
				//端点尺寸
				"size": {
					"value": 2,
					"random": true,
					"anim": {
						"enable": false,
						"speed": 40,
						"size_min": 0.1,
						"sync": false
					}
				},
				//线
				"line_linked": {
					"enable": true,
					"distance": 80,
					//距离内连线
					"color": "#0426A1",
					"opacity": 0.2,
					"width": 1
				},
				//移动属性
				"move": {
					"enable": true,
					//动画速度在这里！！
					"speed": 3,
					"direction": "none",
					"random": false,
					"straight": false,
					"out_mode": "out",
					"attract": {
						"enable": false,
						"rotateX": 600,
						"rotateY": 1200
					}
				}
			},
			//交互
			"interactivity": {
				"detect_on": "canvas",
				"events": {
					//鼠标滑过 和 鼠标点击 属性模式 //true表示开启 false 关闭
					"onhover": {
						"enable": true,
						"mode": "grab"
					},
					"onclick": {
						"enable": true,
						"mode": "push"
					},
					"resize": true
				},
				//各种模式属性 把属性名替换 两个状态的 "mode": 即可1653/1657附近 "grab" "bubble" "repulse" "push" "remove"
				//下面是鼠标事件名称
				"modes": {
					//鼠标与distance范围内点连线
					"grab": {
						"distance": 100,
						"line_linked": {
							"opacity": 1
						}
					},
					//改变周围点相应属性
					"bubble": {
						"distance": 100,
						"size": 10,
						"duration": 2,
						"opacity": 8,
						"speed": 3
					},
					//鼠标周围distance范围排斥
					"repulse": {
						"distance": 100
					},
					//添加 或 删除点de数量
					"push": {
						"particles_nb": 4
					},
					"remove": {
						"particles_nb": 2
					}
				}
			},
			"retina_detect": true,
		}

	);
</script>
</body>
</html>