vjs

  1. var br = (function() {
  2. var ua = navigator.userAgent.toLowerCase();
  3. browser = {
  4. iPhone: /iphone/.test(ua),
  5. iPad: /ipad/.test(ua),
  6. iPod: /ipod/.test(ua),
  7. isLetv: /letv/.test(ua),
  8. Android: /android/.test(ua),
  9. AndroidPad: /android/.test(ua) && !/mobile/.test(ua),
  10. atwin: /win/.test(ua),
  11. opera: /opera/.test(ua),
  12. msie: /msie/.test(ua),
  13. firefox: /firefox/.test(ua),
  14. safari: /safari/.test(ua) && !/chrome/.test(ua),
  15. wph: /windows phone/.test(ua),
  16. ps: /playstation/.test(ua),
  17. uc: /ucbrowser|ucweb/.test(ua),
  18. xiaomi: /xiaomi/.test(ua),
  19. weixin: /MicroMessenger/i.test(ua),
  20. isLetvTv: function() {
  21. try {
  22. return typeof LetvFish.getBrowserType == 'function';
  23. } catch (e) {
  24. return false;
  25. }
  26. }
  27. };
  28.  
  29. var rwebkit = /(webkit)[ \/]([\w.]+)/,
  30. ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
  31. rmsie = /(msie) ([\w.]+)/,
  32. rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
  33.  
  34. var match = rwebkit.exec(ua) ||
  35. ropera.exec(ua) ||
  36. rmsie.exec(ua) ||
  37. ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || [];
  38.  
  39. browser.version = match[2] || "0";
  40. return browser;
  41. })();
  42. var $js = (function() {
  43. var undefined, filter = [].filter,
  44. slice = [].slice,
  45. class2type = {},
  46. classSelectorRE = /^\.([\w-]+)$/,
  47. idSelectorRE = /^#([\w-]*)$/,
  48. tagSelectorRE = /^[\w-]+$/;
  49.  
  50. var browser = br;
  51.  
  52. /**
  53. * @desc vjs框架入口,实现DOM选择器
  54. *
  55. */
  56. vjs = function(selector, context) {
  57. return new vjs.fn.init(selector, context);
  58. }
  59.  
  60. vjs.isPC = false;
  61.  
  62. var qsa = function(element, selector) {
  63. var found
  64. try {
  65. return (isDocument(element) && idSelectorRE.test(selector)) ?
  66. ((found = element.getElementById(RegExp.$1)) ? [found] : []) :
  67. (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
  68. slice.call(
  69. classSelectorRE.test(selector) ? (
  70. element.getElementsByClassName ? element.getElementsByClassName(RegExp.$1) : qsc(element, RegExp.$1)) :
  71. tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) :
  72. element.querySelectorAll(selector)
  73. )
  74. } catch (e) {
  75. return []
  76. }
  77. }
  78.  
  79. var Z = function(me, dom, selector) {
  80. dom = dom || []
  81. me.selector = selector || ''
  82. me.length = dom.length
  83. for (var i = 0, j = dom.length; i < j; i++) {
  84. me[i] = dom[i];
  85. }
  86. return me
  87. }
  88.  
  89. var isZ = function(object) {
  90. return object instanceof Z
  91. }
  92.  
  93. var qsc = function(parent, id) {
  94. if (parent.getElementsByTagName) {
  95. var el = parent.getElementsByTagName('*');
  96. var pattern = new RegExp("(^|\\s)" + id + "(\\s|$)");
  97. for (var i = 0, j = el.length; i < j; i++) {
  98. if (pattern.test(el[i].className)) {
  99. return [el[i]];
  100. }
  101. }
  102. }
  103. return [];
  104. }
  105.  
  106. vjs.fn = {
  107. init: function(selector, context) {
  108. if (!selector) return Z(this);
  109. else if (selector.nodeType) return Z(this, [selector])
  110. else {
  111. var dom
  112. if (isArray(selector)) dom = compact(selector)
  113. else if (context !== undefined) return vjs(context).find(selector)
  114. else dom = qsa(document, selector)
  115. return Z(this, dom, selector);
  116. }
  117. },
  118. find: function(selector) {
  119. var result, me = this;
  120. if (typeof selector == 'object')
  121. result = vjs(selector).filter(function() {
  122. var node = this
  123. return [].some.call(me, function(parent) {
  124. return vjs.contains(parent, node)
  125. })
  126. })
  127. else if (this.length == 1) result = vjs(qsa(this[0], selector))
  128. else result = this.map(function() {
  129. return qsa(this, selector)
  130. })
  131. return result
  132. },
  133. each: function(callback) {
  134. if ([].every) {
  135. [].every.call(this, function(el, idx) {
  136. return callback.call(el, idx, el) !== false
  137. });
  138. } else {
  139. for (var i = 0, len = this.length; i < len; i++) {
  140. callback.call(this[i], i, this[i]);
  141. }
  142. }
  143.  
  144. return this
  145. },
  146. hasClass: function(name) {
  147. var me = this[0];
  148. return new RegExp('(\\s|^)' + name + '(\\s|$)').test(me.className);
  149. },
  150. addClass: function(name) {
  151. var classNameArray = (name || '').split(/\s+/);
  152. return this.each(function() {
  153. var currClassName = this.className;
  154. for (var i = 0, len = classNameArray.length; i < len; i++) {
  155. if (!vjs(this).hasClass(classNameArray[i])) {
  156. currClassName += ' ' + classNameArray[i];
  157. }
  158. }
  159. this.className = currClassName;
  160. });
  161. },
  162. removeClass: function(name) {
  163. var classNameArray = (name || '').split(/\s+/);
  164. return this.each(function() {
  165. var currClassName = this.className;
  166. for (var i = 0, len = classNameArray.length; i < len; i++) {
  167. var reg = new RegExp('(\\s|^)' + classNameArray[i] + '(\\s|$)');
  168. currClassName = currClassName.replace(reg, ' ');
  169. }
  170.  
  171. this.className = vjs.trim(currClassName);
  172. })
  173. },
  174. on: function(name, callback, context) {
  175. return this.each(function(i, element) {
  176. var evtDelagate = function(e) {
  177. e.target = e.target || e.srcElement;
  178. callback.call(context, e)
  179. }
  180. if (!element['domid']) element['domid'] = String(Math.random()).slice(-4);
  181. var guid = name + '_' + element['domid'];
  182. callback[guid] = evtDelagate;
  183.  
  184. if (element.addEventListener) {
  185. element.addEventListener(name, evtDelagate, false);
  186. } else if (element.attachEvent) {
  187. element.attachEvent('on' + name, evtDelagate);
  188. }
  189.  
  190. });
  191. },
  192. off: function(name, callback, context) {
  193. return this.each(function(i, element) {
  194. var guid = name + '_' + element['domid'],
  195. fn = callback[guid] || callback;
  196.  
  197. if (element.removeEventListener) {
  198. element.removeEventListener(name, fn, false);
  199. } else if (element.detachEvent) {
  200. element.detachEvent('on' + name, fn);
  201. }
  202. });
  203. },
  204. getStyle: function(styleName) {
  205. var node = this[0];
  206. if (browser.msie) {
  207. switch (styleName) {
  208. // 透明度
  209. case "opacity":
  210. return ((node.filters['DXImageTransform.Microsoft.Alpha'] ||
  211. node.filters['alpha'] || {}).opacity ||
  212. 100);
  213. // 浮动
  214. case "float":
  215. styleName = "styleFloat";
  216. }
  217. return node.style[styleName] ||
  218. node.currentStyle ? node.currentStyle[styleName] : 0;
  219. } else {
  220. // 浮动
  221. if (styleName == "float") {
  222. styleName = "cssFloat";
  223. }
  224. return node.style[styleName] ||
  225. (document.defaultView.getComputedStyle(node, "") ? document.defaultView.getComputedStyle(node, "")[styleName] : null) || 0;
  226. }
  227. },
  228. setStyle: function(styleName, styleValue) {
  229. return this.each(function() {
  230. var node = this;
  231. if (browser.msie) {
  232. switch (styleName) {
  233. case "opacity":
  234. node.style.filter = "alpha(opacity=" + (styleValue * 100) + ")";
  235. if (!node.currentStyle || !node.currentStyle.hasLayout) {
  236. node.style.zoom = 1;
  237. }
  238. return;
  239. case "float":
  240. styleName = "styleFloat";
  241. }
  242. } else {
  243. if (styleName == "float") {
  244. styleName = "cssFloat";
  245. }
  246. }
  247.  
  248. node.style[styleName] = styleValue;
  249. });
  250. },
  251. getAttr: function(name) {
  252. var node = this[0];
  253. return node.getAttribute(name);
  254. },
  255. setAttr: function(name, value) {
  256. return this.each(function() {
  257. var node = this;
  258. node.setAttribute(name, value);
  259. });
  260. },
  261. offset: function() {
  262. var me = this[0];
  263. var body = document.body,
  264. box = me.getBoundingClientRect();
  265.  
  266. return {
  267. top: box.top + (window.scrollY || body.parentNode.scrollTop || me.scrollTop) - (document.documentElement.clientTop || body.clientTop || 0),
  268. left: box.left + (window.scrollX || body.parentNode.scrollLeft || me.scrollLeft) - (document.documentElement.clientLeft || body.clientLeft || 0)
  269. };
  270. },
  271. width: function(num) {
  272. if (typeof num == 'undefined') {
  273. return this[0].offsetWidth;
  274. }
  275. this[0].style.width = parseFloat(num) + 'px';
  276. },
  277. height: function(num) {
  278. if (typeof num == 'undefined') {
  279. return this[0].offsetHeight;
  280. }
  281. this[0].style.height = parseFloat(num) + 'px';
  282. },
  283. map: function(fn) {
  284. return vjs(vjs.map(this, function(el, i) {
  285. return fn.call(el, i, el)
  286. }))
  287. }
  288. }
  289.  
  290. vjs.fn.init.prototype = vjs.fn;
  291.  
  292. function type(obj) {
  293. return obj == null ? String(obj) :
  294. class2type[toString.call(obj)] || "object"
  295. }
  296.  
  297. function isFunction(value) {
  298. return type(value) == "function"
  299. }
  300.  
  301. function isDocument(obj) {
  302. return obj != null && (obj.nodeType == 9 || obj.nodeType == obj.DOCUMENT_NODE)
  303. }
  304.  
  305. function isArray(value) {
  306. return value instanceof Array
  307. }
  308.  
  309. function likeArray(obj) {
  310. return typeof obj.length == 'number'
  311. }
  312.  
  313. function compact(array) {
  314. return filter.call(array, function(item) {
  315. return item != null
  316. })
  317. }
  318.  
  319. function className(node, value) {
  320. var klass = node.className,
  321. svg = klass && klass.baseVal !== undefined
  322.  
  323. if (value === undefined) return svg ? klass.baseVal : klass
  324. svg ? (klass.baseVal = value) : (node.className = value)
  325. }
  326.  
  327. function funcArg(context, arg, idx, payload) {
  328. return isFunction(arg) ? arg.call(context, idx, payload) : arg
  329. }
  330.  
  331. vjs.contains = function(parent, node) {
  332. return parent !== node && parent.contains(node)
  333. }
  334.  
  335. vjs.map = function(elements, callback) {
  336. var value, values = [],
  337. i, key
  338. if (likeArray(elements))
  339. for (i = 0; i < elements.length; i++) {
  340. value = callback(elements[i], i)
  341. if (value != null) values.push(value)
  342. } else
  343. for (key in elements) {
  344. value = callback(elements[key], key)
  345. if (value != null) values.push(value)
  346. }
  347. return values
  348. }
  349.  
  350. vjs.each = function(elements, callback) {
  351. var i, key
  352. if (likeArray(elements)) {
  353. for (i = 0; i < elements.length; i++)
  354. if (callback.call(this, i, elements[i]) === false) return elements
  355. } else {
  356. for (key in elements)
  357. if (callback.call(this, key, elements[key]) === false) return elements
  358. }
  359.  
  360. return elements
  361. }
  362.  
  363. vjs.trim = function(str) {
  364. return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  365. }
  366.  
  367. vjs.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
  368. class2type["[object " + name + "]"] = name.toLowerCase()
  369. });
  370.  
  371. vjs.extend = function(props) {
  372. var init, subObj;
  373.  
  374. props = props || {};
  375.  
  376. init = props['init'] || props.init || this.prototype['init'] || this.prototype.init || function() {};
  377.  
  378. subObj = function() {
  379. init.apply(this, arguments);
  380. };
  381.  
  382. subObj.prototype = vjs.create(this.prototype);
  383. subObj.prototype.constructor = subObj;
  384.  
  385. if (!props.__proto__) props.__proto__ = subObj.prototype;
  386.  
  387. subObj.extend = vjs.extend;
  388.  
  389. for (var name in props) {
  390. if (props.hasOwnProperty(name)) {
  391. subObj.prototype[name] = props[name];
  392. }
  393. }
  394.  
  395. return subObj;
  396. }
  397.  
  398. vjs.create = function(obj) {
  399. function F() {}
  400. F.prototype = obj;
  401. return new F();
  402. };
  403.  
  404. vjs.getWinWH = function() {
  405. var pagerWidth = window.innerWidth,
  406. pagerHeight = window.innerHeight;
  407.  
  408. if (typeof pagerWidth != 'number') {
  409. if (document.compatMode == 'CSS1Compat') {
  410. pagerWidth = document.documentElement.clientWidth;
  411. pagerHeight = document.documentElement.clientHeight;
  412. } else {
  413. pagerWidth = document.body.clientWidth;
  414. pagerHeight = document.body.clientHeight;
  415. }
  416. }
  417. return {
  418. width: pagerWidth,
  419. height: pagerHeight
  420. }
  421. }
  422.  
  423. vjs.safari = browser.safari;
  424.  
  425. return vjs;
  426. })();
  427. var emptyFn = function(){};
  428. var lib = {
  429. createElement: function(tagName, attributes) {
  430. var el = document.createElement(tagName),
  431. attrname;
  432. for (attrname in attributes) {
  433. if (attributes.hasOwnProperty(attrname)) {
  434. if (attrname.indexOf("-") !== -1) {
  435. el.setAttribute(attrname, attributes[attrname]);
  436. } else {
  437. el[attrname] = attributes[attrname];
  438. }
  439. }
  440. }
  441. return el;
  442. },
  443. removeElem: function(node) {
  444. if (node) {
  445. if (node.remove) {
  446. return node.remove();
  447. } else {
  448. return node.parentNode && node.parentNode.removeChild && node.parentNode.removeChild(node);
  449. }
  450. }
  451. },
  452. el: function(p, n) {
  453. var elem = n ? $js(p).find(n)[0] : $js(p)[0];
  454. if (!elem) {
  455. elem = {
  456. "setAttribute": function() {},
  457. "style": {},
  458. "isnull": true
  459. };
  460. }
  461.  
  462. return elem;
  463. },
  464. //判断是否存在这个元素
  465. existEl: function(el) {
  466. if (typeof el === 'object') {
  467. if (el.isnull) {
  468. return false;
  469. } else if (el instanceof Array) {
  470. return el.length > 0;
  471. } else {
  472. return true;
  473. }
  474. } else if (typeof el === 'string') {
  475. return arguments.callee(this.el(el));
  476. }
  477. return false;
  478. },
  479. now: Date.now || function() {
  480. return +new Date();
  481. },
  482. merge: function(obj1, obj2, safe) {
  483. if (!obj2) {
  484. obj2 = {};
  485. };
  486.  
  487. for (var attrname in obj2) {
  488. if (obj2.hasOwnProperty(attrname) && (!safe || !obj1.hasOwnProperty(attrname))) {
  489. obj1[attrname] = obj2[attrname];
  490. }
  491. }
  492. return obj1;
  493. },
  494. wsLog: function(data) {},
  495. debug: function(msg, prefix, line) {
  496. line = line || " ";
  497.  
  498. if (H5AD.config.DEBUG == true || adTools.getQuery("arkdebug")) {
  499. if (typeof msg == 'object') {
  500. if (prefix) {
  501. console.log("%c" + prefix, "color:#f0d");
  502. this.wsLog(prefix);
  503. }
  504. this.wsLog(msg);
  505. console.log(msg);
  506. } else {
  507. if (msg == undefined) {
  508. console.log("数据空" + line)
  509. return;
  510. }
  511. this.wsLog(msg);
  512. console.log(msg + line);
  513. }
  514. }
  515. },
  516. json: function(data) {
  517. try {
  518. if (typeof data === "string") {
  519. if (JSON && JSON.parse) {
  520. return JSON.parse(data);
  521. }
  522. return eval("(" + data + ")");
  523. }
  524. //谨慎使用
  525. return JSON.stringify(data);
  526. } catch (ex) {
  527. return 'error';
  528. }
  529. },
  530. // 对象浅复制
  531. easyClone: function(raw, target) {
  532. for (var prop in target) {
  533. if (target.hasOwnProperty(prop) && typeof target[prop] !== 'object') {
  534. raw[prop] = target[prop];
  535. }
  536. }
  537. },
  538. getJSON: function(param) {
  539. var url = param.url,
  540. data = param.data,
  541. success = param.success,
  542. fail = param.fail,
  543. callback = param.callback || 'callback',
  544. timeout = param.timeout || 5000,
  545. maxCount = param.maxCount || 2;
  546.  
  547. var jsonpCallback,
  548. count = -1,
  549. delayID = 0,
  550. s,
  551. self = this,
  552. head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
  553.  
  554. var tmp = [];
  555.  
  556. if(data) for(var k in data) tmp.push(k + '=' + data[k]);
  557.  
  558. if(!/\?/.test(url)){
  559. url += '?' + tmp.join('&');
  560. }else{
  561. url += '&' + tmp.join('&');
  562. }
  563.  
  564. var addCb = function(){
  565. var time = self.now(),
  566. jsonpCallback = 'vjs_' + time + Math.floor(Math.random()*100);
  567.  
  568. window[jsonpCallback] = function(response) {
  569. destroy();
  570.  
  571. success.call(this, response,{responseTime: self.now()-time, retryCount: count});
  572.  
  573. window[jsonpCallback] = null;
  574. };
  575.  
  576. return jsonpCallback;
  577. };
  578.  
  579. var destroy = function(){
  580. if(window[jsonpCallback]) window[jsonpCallback] = emptyFn;
  581. clearTimeout(delayID);
  582.  
  583. if (s && s.parentNode) {
  584. head.removeChild(s);
  585.  
  586. s.onload = s.onreadystatechange = null;
  587.  
  588. s = undefined;
  589. }
  590. };
  591.  
  592. var load = function() {
  593. destroy();
  594. count++;
  595. if (count >= maxCount){
  596. fail && fail.call(this);
  597. return;
  598. }
  599.  
  600. jsonpCallback = addCb();
  601.  
  602. var jsonpUrl = url;
  603.  
  604. if(/(\=)\?(&|$)/i.test(jsonpUrl)){
  605. jsonpUrl = jsonpUrl.replace(/(\=)\?(&|$)/i,'$1' + jsonpCallback + '$2');
  606. }else{
  607. jsonpUrl += '&' + callback + '=' + jsonpCallback+'&j='+jsonpCallback;
  608. }
  609.  
  610. if(param.log) param.log.pushLog('lib getJSON===' + jsonpUrl + '===' + jsonpCallback + '====' + count);
  611. s = document.createElement('script');
  612. s.setAttribute('type', 'text/javascript');
  613. s.setAttribute('src', jsonpUrl);
  614.  
  615. head.insertBefore(s, head.firstChild);
  616.  
  617. delayID = setTimeout(load, timeout);
  618. };
  619.  
  620. load();
  621.  
  622. return {
  623. destroy : destroy
  624. }
  625. }
  626. };
  627. /**
  628. //以下对lib的使用
  629. var url = "http://localhost:3000/reso";
  630. lib.getJSON({url:url,success:function(data){
  631. alert("nihao");
  632. }});
  633. //lib createElement的使用
  634. var src = "http://i3.letvimg.com/lc06_iscms/201611/09/23/49/7c2767be74d145a4b9e6eb8f648e46a0.jpg";
  635. var img = lib.createElement('img', {
  636. src: src
  637. });
  638. $js(img).on('load', function() {
  639. img = null;
  640. });
  641. */
  642. //
  643. lib.existEl("box");//这个函数

没有jquery的时候,你看看这个的更多相关文章

  1. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  2. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  3. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  4. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  5. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  6. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

  7. 利用snowfall.jquery.js实现爱心满屏飞

    小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...

  8. jQuery的61种选择器

    The Write Less , Do More ! jQuery选择器 1. #id : 根据给定的ID匹配一个元素 <p id="myId">这是第一个p标签< ...

  9. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  10. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

随机推荐

  1. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  2. iOS 判断内容是否是中文,两种实现

    用category实现 新建类别文件,代码 .h文件 #import <Foundation/Foundation.h> @interface NSString (Valid) - (BO ...

  3. php cli方式下获取服务器ip

    (未整理....) (1)php cli方式下获取服务器ip [php]  function getServerIp(){          $ss = exec('/sbin/ifconfig et ...

  4. iframe 的使用和登陆退出的实现——整个页面跳转

    iframe中如果只是页面跳转的话,我们依然只是部分的加载的了,为了实现整个页面的所有内容跳转,下面提供了整个页面跳转的方法. iframe例子 1.总的iframe页面(访问就访问这个)  all. ...

  5. DedeCms文档关键词替换,优先替换长尾关键词

    本文教大家:dedecms文档关键词维护之关键词出现多次,只给出现的第一个加链接的 举例:当文章中出现了一百次台历时,按官方的原理,他会给一百个台历都加上链接的.dedecms这如何是好? 解决方法( ...

  6. 解决PowerShell命令行窗口中不显示光标的问题

    不知道什么原因,在有些系统上打开PowerShell命令行窗口后,光标无法显示.这种情况在Windows Server 2008/2012.Windows 8/9/10上都出现过,估计是由于某些系统软 ...

  7. PHP&MySQL(三)——数组

    前一段忙着比赛忙着找实习,最后一地鸡毛,就是长长教训罢了.... 看书还是多必须的,试着高效的.踏实的做吧!! <?php //PHP数组其实能创建很多种数据结构,列表,堆栈,队列,树等 //数 ...

  8. MMORPG大型游戏设计与开发(概述)updated

    1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...

  9. 「Mobile Testing Summit China 2016」 中国移动互联网测试大会-议题征集

    时至北京盛夏,一场由 TesterHome 主办的关于移动互联网测试技术的盛会正在紧锣密鼓的筹备中.只要你关注软件质量,热爱测试,期待学习,都欢迎你加入这次移动测试技术大会中和我们一起分享经验.探讨话 ...

  10. Windows 常用 CMD 命令行介绍

    看下面的链接: http://www.jianshu.com/p/76ff5d16f113