<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-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">
		<title>如何深入理解开源项目-思洋互动</title>
		<meta name="keywords" content="如何深入理解开源项目">
	    <meta name="description" content="一、从小代码集看起    对于一个新手，是绝对不适合一上来就追求spring，web容器，数据库这种级别的代码。万事开头总是要从简单的来。如果没有太多阅读开源代码经...">
		<meta name="renderer" content="webkit" />
		<link href="/css/main.css?v=39" rel="stylesheet">
		<link href="/css/base.css?v=39" rel="stylesheet">
        <link href="/css/swiper-3.4.2.min.css" rel="stylesheet">
		<script type="text/javascript" src="/js/jquery.min.js"></script>
        <script type="text/javascript" src="/js/swiper-3.4.2.min.js"></script>
		<!--[if lt IE 9]>
            <script src="/js/html5shiv.min.js"></script>
            <script src="/js/respond.min.js"></script>
            <link href="/css/ie.css" rel="stylesheet">
        <![endif]-->
		<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?8914d517c927d8e794148d05e387fb17";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
<link rel="canonical" href="https://www.ciya.cn/article/1117.html">
		</head>
	<body class="no-banner">
		<div class="container">
			<div class="header">
	<div class="header-top">
		<div class="w1700">
			<a href="https://www.ciya.cn/"><img src="/images/logo.png?v=2"></a>
		</div>
	</div>
	<div class="header_b">
		<header class="slide">
			<div id="navToggle" class="menu-handler">
				<span class="burger burger-1 trans"></span>
				<span class="burger burger-2 trans-fast"></span>
				<span class="burger burger-3 trans"></span>
			</div>
		</header>
	</div>
	<nav class="slide">
		<div class="w1700">
			<a class="index" href="/"></a>
			<ul>
								<li><a href="https://www.ciya.cn/case/12.html">项目案例</a></li>
								<li><a href="https://www.ciya.cn/website/9.html">网站建设</a></li>
								<li><a href="https://www.ciya.cn/marketing/10.html">网络营销</a></li>
								<li><a href="https://www.ciya.cn/media/11.html">新媒体</a></li>
								<li class="active"><a href="https://www.ciya.cn/news/16.html">动态</a></li>
								<li><a href="https://www.ciya.cn/about/8.html">关于</a></li>
								<li><a href="https://www.ciya.cn/contact/13.html">联系</a></li>
							</ul>
		</div>
	</nav>
</div>            <div class="content slide">
                <div class="position bgf1">
                    <div class="w1700">
                        <a href="https://www.ciya.cn/">首页 ></a>
                        <a href="https://www.ciya.cn/news/16.html">动态 ></a>
                        <a href="https://www.ciya.cn/news/35.html">网站知识</a>
                    </div>
                </div>
                <div class="case-type">
                    <div class="w1700">
                                                <a href="https://www.ciya.cn/news/32.html" >品牌合作</a>
                                                <a href="https://www.ciya.cn/news/31.html" >新闻动态</a>
                                                <a href="https://www.ciya.cn/news/38.html" >网站建设</a>
                                                <a href="https://www.ciya.cn/news/41.html" >网站制作</a>
                                                <a href="https://www.ciya.cn/news/40.html" >网站设计</a>
                                                <a href="https://www.ciya.cn/news/42.html" >运营推广</a>
                                                <a href="https://www.ciya.cn/news/35.html"  class="active">网站知识</a>
                                            </div>
                </div>
                <div class="padding-tb80">
                    <div class="w1700 clear">
                        <div class="fl xwxq-l">
                            <div class="noselettext">
                                <div class="xwxq-title mg-bt60 wow slideUp">
                                    <h1 class="mg-bt35">如何深入理解开源项目</h1>
                                    <span>时间：2022-07-18</span>
                                </div>
                                <div class="edit2 mg-bt60 wow slideUp">
                                                                        <h1><span style="font-size: 16px;">一、从小代码集看起</span><br/></h1><p> 对于一个新手，是绝对不适合一上来就追求spring，web容器，数据库这种级别的代码。万事开头总是要从简单的来。如果没有太多阅读开源代码经验的话，请从一个代码量在千行级别或更小的repository开始吧。在阅读代码中，也慢慢留意一些约定，如</p><ul style="list-style-type: none;" class=" list-paddingleft-2"><li><p>代码的文档一般写哪里了（README.md ? 或者 docs目录？）</p></li><li><p>代码的起名字和目录组织大概遵循什么规范</p></li><li><p>代码如何配置</p></li><li><p>代码如何build<br style="box-sizing: border-box; outline: 0px; overflow-wrap: break-word;"/>这些将帮你构建一个初步的可以深入代码的路径，并为进一步深入理解代码打基础。</p></li></ul><p>这一点不得不夸一下javascript的npm。npm有相当多的很小的好代码。老牌web框架express的代码数才4000多行。一些小工具比如随机字符串产生器、分布式ID产生器只有数十行。非常适合入门学习。</p><h1><span style="font-size: 16px;">二、聚焦</span></h1><p>有多少人是抱着一颗不切实际的预期去看代码的？有人说，我Java想提升一下去看看Spring吧；有人说我Web没有太理解，去看看Tomcat吧。结果可想而知。正像问问题时不应该问过于宽泛的问题，看任何代码都不应该抱有看一遍全都看懂的期望——因为就连代码作者自己都做不到。</p><p> 品牌网站建设,写代码时往往都会做一些抽象，把某个特定问题拆解。比如分层、比如抽象为一个class代表一个实际的概念等等。每个抽象都可能解决一个具体的问题。看代码也是如此，一定要先聚焦，把看代码的scope限制住，不要贪多。</p><p> 比如当看Java Collections代码，可能是希望学习其数据结构的实现方式——到底链表、树、跳表等是怎么实现的，内存中一个个object是如何关联起来的，如何被快速访问的；又或者是特定算法的实现（比如Collections.sort用的是什么排序算法）。此时，其他的部分就不要太过于在意，直接忽略那些抽象隐藏起来的地方，以及不相关的细节。</p><p><br/></p><p style="text-align: center;"><img src="/upload/image/20220718/1658111021135705.png" title="1658111021135705.png" alt="image.png" width="581" height="349" style="width: 581px; height: 349px;"/></p><p><br/></p><p> 对于更复杂的服务就更要聚焦。比如Jetty解决了相当多问题，比如：如何启动、如何找到Java Runtim、如何加载配置文件、如何load核心class、如何打log如何处理IO、如何解析HTTP协议的数据、如何将数据转换为Servlet标准的处理、如何管理集群…… 并且，这些代码里还会夹杂着一些设计模式的层，比如XXXXFactory，XXXXAdaptor…… 如此复杂的代码，即使是很有经验的人也不可能兼顾着在短时间内全看懂。所以，每次看代码之前，务必先确定一个要学习的目的。如果代码量很庞大，就可以安排一个学习计划，每次聚焦于一个目的。</p><p> 对于像Java这样的面向对象语言，优秀的设计往往都是基于一组代表概念的类生成的对象的相互交互。学习代码时，优先去看类名，组织起高层的全局感非常重要。比如，如果希望学习一个“驾驶模拟”系统的代码中有关“如何驾驶”的部分，一定会找到代表操作人、油门和方向盘概念的类。然后去观察他们是如何互动的。此时绝对不该扯上变速箱、发动机和传动轴。</p><p> 作为像C这样的语言，其源码大致是面向过程的，即分多个步骤做一件事，每个步骤再细分为更多子步骤。例如，nginx分配一段内存来存储一个http请求头就大概包括</p><p><br/></p><ol style="list-style-type: none;" class=" list-paddingleft-2"><li><p>利用一个工具函数分配指定大小的内存</p></li><li><p>从socket中将数据读出来，并填充到分配的内存上<br style="box-sizing: border-box; outline: 0px; overflow-wrap: break-word;"/>而第一步可以进一步细化为：从一个内存池把一段内存借出来，如果没有可用内存了就得找操作系统要，要到了内存可能还需要填充为零……等等子步骤。这时预先画画流程图对理解代码会非常有帮助。</p></li></ol><p>总之，如果你被庞大的源码打败，大概率不是因为你笨，而是因为你过于贪心急躁了。</p><p><br/></p><p><strong>三、请先看文档</strong></p><p>任何代码，总得有个出现的动机和大致的工作原理。好的代码一般会在文档里（一般是README.md)里讲得比较明白。比如Redis的源代码的README.md就给出了非常概要性的信息，见https://github.com/antirez/redis。如果还需要对某个特定的主题的解释，Redis官网也提供了大量的文字来说明，比如</p><ul style="list-style-type: none;" class=" list-paddingleft-2"><li><p>解释Redis的常用数据类型 —— https://redis.io/topics/data-types-intro</p></li><li><p>解释如何实现一个key过期 —— https://redis.io/commands/expire</p></li><li><p>解释如何做主从复制 —— https://redis.io/topics/replication</p></li><li><p>……<br style="box-sizing: border-box; outline: 0px; overflow-wrap: break-word;"/>这些文档能非常好的指导阅读相关的源代码。</p></li></ul><p>更复杂的开源系统往往都有对应的书籍来解释其内部工作原理。比如，《MySQL技术内幕：InnoDB存储引擎》是很好的指引如何理解InnoDB源代码的书，大名几乎每个做业务的同学都会接触到；当年侯捷先生的《深入浅出MFC》非常细致的剖析了MFC内部的C++是怎么把本来C++运行时做不到的事情通过一些歪招给搞定的；《C专家编程》（又称鱼书），用很多小例子来解释比如一个复杂的函数指针的是怎么被parse的，变量是如何被保存和传递的。等等等等。</p><p>如果你阅读的是著名系统的源代码，请尽量先从文档/书籍入手找到切入点，往往能事半功倍。对于可读性，给人写的东西总是好过给机器写的东西啊。</p><p><br/></p><p><strong>四、关注资源的生命周期</strong></p><p>有生产意义的系统一般总是会有一些核心的资源需要管理，而这些资源的生命周期的维护往往是这类系统代码的核心。</p><p>比如</p><ul style="list-style-type: none;" class=" list-paddingleft-2"><li><p>对于spring-core来讲，其核心资源是“Bean”。一个Bean被创建、初始化、被使用、被解构，是整套代码的核心；</p></li><li><p>对于spring-webmvc，其核心资源是“HTTP 请求”。一个http请求从被收到开始、其数据被注入到请求handler，其返回的数据结构被设定，是整套代码的核心；</p></li><li><p>对于一个池 （比如commons-pool，thread-pool)，其核心资源是池中的Object。Object从创建，被借出，被使用，被归还，到最后被销毁，是整套代码的核心</p></li></ul><p>数据库系统、队列系统、web系统、一些业务系统（比如做活动、发红包）、安全系统等等，都有这样的资源的存在。把握住核心资源的生命周期就能掐到代码的命门。</p><p><br/></p><p>五、找一个好工具</p><p>很多年前我们做C开发时都喜欢用一款叫做&quot;Source Insight&quot;的软件来学习代码。他可以开很多窗口，在不同的函数间跳来跳去，还可以做书签方便定位。</p><p>如今，基本上是个IDE都会有这些功能，就连没有类型的js也能很方便的在VS Code中做各种符号跳转和多串口切换。</p><p>代码嘛，了解其执行顺序，而非其写作顺序更有利于学习。</p><p><br/></p><p><strong>六、建立调试环境</strong></p><p> 对于网站建设公司来讲,如果对于某些系统需要特别细致的理解，就需要把代码跑起来。通过打断点，输出log验证等方式印证自己的想法。对于js，python这类会相当简单，因为npm/pip等工具解决了很多依赖问题，而且无需编译，直接启动-修改-重启-修改-……即可不断的尝试。jvm类的系统只要能满足mvn install或者gradle build这样的通用编译约定，或者通过IDE直接加载，也能相对容易的把系统跑起来。</p><p> 对于C/C++的系统就要麻烦许多，需要自己建立一个虚拟机，然后自行安装必要的包。对于它们，远程GDB之类的技术是非常必要的。对于前端代码，使用jsfiddle配合chrome开发工具这样的工具可让你快速的构建一段js+html+css代码的片段，并且实时的看到效果。</p><p> 值得提一句的是，有些系统可能涉及到比较复杂的多进程/线程并发执行，对调试学习非常不利。此时需要优先寻找将系统退化到单线程/进程的运行方式（毕竟代码作者自己也得靠这个模式调试不是：）。一个典型的例子是nginx通常会有1个master进程+多个worker进程并发运行，但在开发时只要配置中设定：</p><pre data-index="0" style="text-align: left;">daemon&nbsp;off;
worker_processer&nbsp;1;12</pre><p style="text-align: left;">即可使其退化为单进程运行时模式。</p><h1 style="text-align: left;"><span style="font-size: 16px;">七、看代码很累，要坚持</span></h1><p> 就像跑步能跑多远，跑多久，都是要靠自己。阅读代码的确能极大地提高个人能力。但是能走多远要靠毅力坚持。而坚持的大敌就是过大的挫折感。上面提到的种种方法——从简单的入手、聚焦、有计划、找好工具，说白了就是尽量减少挫败感，最大限度的提高“正反馈”。但是即便如此，不可否认的是，对于大多数人，看代码是一项非常枯燥的过程。这时你的恒心，你的毅力，你的“熬”的劲头决定了你能走多远。毕竟，想成为高级程序员并不是轻轻松松的事情。</p><p>横下一条心来，挑战自我吧。</p><p>最后附上部分我曾经看过的高质量开源代码：</p><ul style="list-style-type: none;" class=" list-paddingleft-2"><li><p>nginx</p></li><li><p>MFC</p></li><li><p>Redis</p></li><li><p>Lucene</p></li><li><p>Jetty</p></li><li><p>Kafka</p></li><li><p>Thrift</p></li><li><p>Java Executors</p></li><li><p>Java Collections</p></li><li><p>Java Concurrecy</p></li><li><p>express</p></li><li><p>koa</p></li></ul><p><br/></p>                                </div>
                            </div>
                                                        <div class="xwxq-bot bgf1 wow slideUp">
                                <div class="xwxq-fy clear">
                                    <a class="fl" href="/article/1118.html"><i></i>Java中的Hash简介</a>
                                    <a class="fr" href="/article/1116.html"><i></i>DQL，DML，DDL，DDL数据库的四种语言</a>
                                </div>
                                <a class="fhlb" href="#"></a>
                            </div>
                        </div>
                        <div class="fr xwxq-r">
                            <div class="xwxq-tj-page bgf1 mg-bt40 wow slideUp">
                                <div class="xwxq-tj-warp bgfff">
                                    <div class="tjxw-title mg-bt30">
                                        <h3>最新案例</h3><span>LATEST CASES</span>
                                    </div>
                                    <div class="zxal">
                                        <div class="swiper-container">
                                            <div class="swiper-wrapper">
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/409.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214103120.jpg" alt="广州呼吸研究院"/></div>
                                                            <p>广州呼吸研究院</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/433.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214102846.jpg" alt="融创集团"/></div>
                                                            <p>融创集团</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/268.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214102923.jpg" alt="粤海集团"/></div>
                                                            <p>粤海集团</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/414.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211216/20211216115258.jpg" alt="恒大足球学校"/></div>
                                                            <p>恒大足球学校</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/477.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214102958.jpg" alt="侨鑫集团"/></div>
                                                            <p>侨鑫集团</p>
                                                        </a>
                                                    </div>
                                                                                                </div>
                                        </div>
                                        <div class="zxalDot text-center swiperDot"></div>
                                    </div>
                                </div>
                            </div>
                            <div class="xwxq-tj-page bgf1 mg-bt40 wow slideUp">
                                <div class="xwxq-tj-warp bgfff">
                                    <div class="tjxw-title tjxw-title-line mg-bt20">
                                        <h3>热点新闻</h3><span>TOP NEWS</span>
                                    </div>
                                    <ul class="rdxw">
                                                                                <li><a href="https://www.ciya.cn/article/3559.html">1  java heap space(解决方法)</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/1222.html">2  如何在网站后台上传附件</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/1643.html">3  如何在网站后台上传PDF文件</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/1142.html">4  什么是流？</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/3543.html">5  java swing还有人用吗(swing为什么会被淘汰)</a></li>
                                                                            </ul>
                                </div>
                            </div>
                            <div class="xwxq-tj-page bgf1 wow slideUp">
                                <div class="xwxq-tj-warp bgfff">
                                    <div class="tjxw-title tjxw-title-line mg-bt20">
                                        <h3>最新动态</h3><span>NEWS</span>
                                    </div>
                                    <ul class="rdxw">
                                                                                <li><a href="https://www.ciya.cn/article/7318.html">1  商务网站的维护与更新：持续优化，保持竞争力</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7317.html">2  商务网站的社交媒体营销：扩大品牌影响力，吸引更多潜在客户</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7316.html">3  商务网站的广告投放：增加收益，提高知名度</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7315.html">4  商务网站的在线客户服务：提供优质客服，提升用户满意度</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7314.html">5  商务网站的支付系统集成：安全、便捷的交易方式</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7313.html">6  商务网站搜索引擎优化（SEO）：提升排名，增加流量</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7312.html">7  商务网站响应式设计：实现多设备兼容，提升用户体验</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7311.html">8  商务网站开发：选择合适的编程语言和技术栈</a></li>
                                                                            </ul>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="footerbox">
	<div class="footer">
		<div class="w1700">
			<ul>
				<li>
					<span class="fttitle">思洋 · 广州总部</span>
					<div>
						<p>广州天河区珠江新城富力盈力大厦北塔2706</p>
						<p>020-38013166（网站咨询专线）</p>
					</div>
					<p>400-001-5281 （售后服务热线）</p>
				</li>
				<li>
					<span class="fttitle">思洋 · 深圳</span>
					<div>
						<p>深圳市坂田十二橡树庄园F1-7栋</p>
						<p>Site/ http://www.szciya.com </p>
						<p>E-mail/ itciya@vip.163.com</p>
					</div>
					<p>品牌服务专线：400-001-5281 </p>
				</li>
				<li>
					<span class="fttitle">思洋 · 湖南</span>
					<div>
						<p>长沙市天心区芙蓉中路三段398号新时空大厦5楼</p>
						<p>联系电话/ (+86 0731)88282200</p>
					</div>
					<p>品牌服务专线/ 400-966-8830</p>
				</li>
				<li class="lastli">
					<p class="mt10">旗下运营网站：</p>
					<div class="mt10">
						<img src="/images/ftlogo2.png">
						<img src="/images/gogo.png">
						<img src="/images/ftlogo3.png">
						<img src="/images/ftlogo4.png">
						<img src="/images/ftlogo11.png">
					</div>
				</li>
			</ul>
		</div>
	</div>
	<div class="ft_bottom">
		<div class="w1700">
			<p class="cop">Copyright © 2016 广州思洋文化传播有限公司，保留所有权利。 <a href="https://beian.miit.gov.cn/" target="_blank">粤ICP备09033321号</a>
			</p>
		</div>
	</div>
</div>
<div class="le-box active">
	<div class="t show780">
		<a href="tel:13570966600">
			<img src="/images/ml9-1.png?v=1" alt="" class="sow i">
			<img src="/images/ml9-1.png?v=1" alt="" class="iove i">
		</a>
	</div>
	<div class="t">
		<img src="/images/ml1-1.png?v=1" alt="" class="sow i">
		<img src="/images/ml1-1.png?v=1" alt="" class="iove i">
		<div class="iov">
			<div class="img">
				<img src="/images/qr.jpg" alt="与项目经理交流">
			</div>
			<div class="h">扫描二维码<br>与项目经理交流</div>
		</div>
	</div>
	<div class="t">
		<img src="/images/ml2-1.png?v=1" alt="" class="sow i">
		<img src="/images/ml2-1.png?v=1" alt="" class="iove i">
		<div class="iov">
			<div class="img">
				<img src="/images/qq001.jpg" alt="">
			</div>
			<div class="h">扫描二维码<br>与项目经理交流</div>
		</div>
	</div>
	<!--<div class="t">-->
		<!--<a href="http://wpa.qq.com/msgrd?v=3&amp;uin=1607245872&amp;site=ciya.cn&amp;menu=yes" target="_blank">-->
			<!--<img src="/images/ml2-1.png?v=1" alt="" class="sow i">-->
			<!--<img src="/images/ml2-1.png?v=1" alt="" class="iove i">-->
		<!--</a>-->
	<!--</div>-->
	<div class="t hide780">
		<a href="https://affim.baidu.com/unique_510425/chat?siteId=19536215&userId=510425&siteToken=8914d517c927d8e794148d05e387fb17" target="_blank">
			<img src="/images/ml3-1.png?v=1" alt="" class="sow i">
			<img src="/images/ml3-1.png?v=1" alt="" class="iove i">
		</a>
	</div>
</div>
<script>
	$(window).scroll(function(){
//		if($(window).scrollTop()>200){
//			$(".le-box").addClass("active");
//		}else{
//			$(".le-box").removeClass("active");
//		}
	})
</script>
<div class="wap_fx">
	<a href="tel:13570966600" class="phone"></a>
	<a href="mqqwpa://im/chat?chat_type=wpa&uin=1607245872&version=1&src_type=web&web_src=ciya.cn" target="_blank" class="qq"></a>
	<a href="javascript:;" class="wx2"></a>
	<a class="kef986" style="background:rgba(0,0,0,.6) url(/images/ml3-1.png?v=1) no-repeat center;background-size: cover;border-radius: 4px;" href="https://p.qiao.baidu.com/cps/chat?siteId=18513940&userId=510425&siteToken=e5e1bde478969b43bf99b7703a694c0b" target="_blank"></a>
</div>
<div class="wap-wxcode">
	<div class="middle-box">
		<div class="middle-inner">
			<div class="wap-wxcode-con">
				<img src="/images/ff_ewm.jpg" alt=""/>
				<div class="wap-wxcode-bot"><span class="wxname">ciya68</span><button class="copy-btn" data-clipboard-text="ciya68">点击复制</button></div>
				<div class="gb1002"></div>
			</div>
		</div>
	</div>
</div>
<input id="hide" type="hidden">
<script src="/js/clipboard.min.js"></script>
<script>
	$(function(){
		$(".wx2").click(function(){
			$(".wap-wxcode").show();
		});
		$(".gb1002").click(function(){
			$(".wap-wxcode").hide();
		});
		var copyBtn=new ClipboardJS('.copy-btn');
		copyBtn.on("success",function(e){
			// 复制成功
			// alert(e.text);
			showMessage('已成功复制微信号','success',2000)
			e.clearSelection();
		});
		copyBtn.on("error",function(e){
			//复制失败；
			showMessage('复制微信号失败','error',2000)
			console.log( e.action )
		});
		function showMessage(message,type,time) {
			let str = ''
			switch (type) {
				case 'success':
					str = '<div class="success-message" style="width: 100%;height: 50px;background-color: #030026;font-size:17px;text-align: center;color:#fff;position: fixed;left: 0%;bottom: 0%;line-height: 50px;z-index: 9999">\n' +
							'    <span class="mes-text">'+message+'</span></div>'
					break;
				case 'error':
					str = '<div class="error-message" style="width: 100%;height: 50px;background-color: #030026;font-size:17px;text-align: center;color: #fff;position: fixed;left: 0%;bottom: 0%;line-height: 50px;z-index: 9999">\n' +
							'    <span class="mes-text">'+message+'</span></div>'
			}
			$('body').append(str)
			setTimeout(function () {
				$('.'+type+'-message').remove()
			},time)
		}


		var ua = navigator.userAgent.toLowerCase();
		var isWeixin = ua.indexOf('micromessenger')!= -1;
		if(isWeixin){
			$(".kef986").hide();
		}

	})
</script>
            </div>
        </div>
		<script type="text/javascript" src="/js/trunk.js?v=2"></script>
        <script>
            var zxal=null;
            var len=$(".zxal .swiper-slide").length;
            if(len>1){
                zxal = new Swiper('.zxal .swiper-container',{
                    speed:600,
                    loop:true,
                    autoplay : 5000,
                    autoplayDisableOnInteraction : false,
                    pagination : '.zxalDot',
                    paginationClickable :true,
                })
            }else{
                $(".zxalDot").hide();
            }
        </script>
	</body>
</html>

