device.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. (function() {
  2. var previousDevice, _addClass, _doc_element, _find, _handleOrientation, _hasClass, _orientation_event, _removeClass, _supports_orientation, _user_agent;
  3. previousDevice = window.device;
  4. window.device = {};
  5. _doc_element = window.document.documentElement;
  6. _user_agent = window.navigator.userAgent.toLowerCase();
  7. device.ios = function() {
  8. return device.iphone() || device.ipod() || device.ipad();
  9. };
  10. device.iphone = function() {
  11. return _find('iphone');
  12. };
  13. device.ipod = function() {
  14. return _find('ipod');
  15. };
  16. device.ipad = function() {
  17. return _find('ipad');
  18. };
  19. device.android = function() {
  20. return _find('android');
  21. };
  22. device.androidPhone = function() {
  23. return device.android() && _find('mobile');
  24. };
  25. device.androidTablet = function() {
  26. return device.android() && !_find('mobile');
  27. };
  28. device.blackberry = function() {
  29. return _find('blackberry') || _find('bb10') || _find('rim');
  30. };
  31. device.blackberryPhone = function() {
  32. return device.blackberry() && !_find('tablet');
  33. };
  34. device.blackberryTablet = function() {
  35. return device.blackberry() && _find('tablet');
  36. };
  37. device.windows = function() {
  38. return _find('windows');
  39. };
  40. device.windowsPhone = function() {
  41. return device.windows() && _find('phone');
  42. };
  43. device.windowsTablet = function() {
  44. return device.windows() && _find('touch');
  45. };
  46. device.fxos = function() {
  47. return (_find('(mobile;') || _find('(tablet;')) && _find('; rv:');
  48. };
  49. device.fxosPhone = function() {
  50. return device.fxos() && _find('mobile');
  51. };
  52. device.fxosTablet = function() {
  53. return device.fxos() && _find('tablet');
  54. };
  55. device.meego = function() {
  56. return _find('meego');
  57. };
  58. device.mobile = function() {
  59. return device.androidPhone() || device.iphone() || device.ipod() || device.windowsPhone() || device.blackberryPhone() || device.fxosPhone() || device.meego();
  60. };
  61. device.tablet = function() {
  62. return device.ipad() || device.androidTablet() || device.blackberryTablet() || device.windowsTablet() || device.fxosTablet();
  63. };
  64. device.portrait = function() {
  65. return Math.abs(window.orientation) !== 90;
  66. };
  67. device.landscape = function() {
  68. return Math.abs(window.orientation) === 90;
  69. };
  70. device.noConflict = function() {
  71. window.device = previousDevice;
  72. return this;
  73. };
  74. _find = function(needle) {
  75. return _user_agent.indexOf(needle) !== -1;
  76. };
  77. _hasClass = function(class_name) {
  78. var regex;
  79. regex = new RegExp(class_name, 'i');
  80. return _doc_element.className.match(regex);
  81. };
  82. _addClass = function(class_name) {
  83. if (!_hasClass(class_name)) {
  84. return _doc_element.className += " " + class_name;
  85. }
  86. };
  87. _removeClass = function(class_name) {
  88. if (_hasClass(class_name)) {
  89. return _doc_element.className = _doc_element.className.replace(class_name, "");
  90. }
  91. };
  92. if (device.ios()) {
  93. if (device.ipad()) {
  94. _addClass("ios ipad tablet");
  95. } else if (device.iphone()) {
  96. _addClass("ios iphone mobile");
  97. } else if (device.ipod()) {
  98. _addClass("ios ipod mobile");
  99. }
  100. } else if (device.android()) {
  101. if (device.androidTablet()) {
  102. _addClass("android tablet");
  103. } else {
  104. _addClass("android mobile");
  105. }
  106. } else if (device.blackberry()) {
  107. if (device.blackberryTablet()) {
  108. _addClass("blackberry tablet");
  109. } else {
  110. _addClass("blackberry mobile");
  111. }
  112. } else if (device.windows()) {
  113. if (device.windowsTablet()) {
  114. _addClass("windows tablet");
  115. } else if (device.windowsPhone()) {
  116. _addClass("windows mobile");
  117. } else {
  118. _addClass("desktop");
  119. }
  120. } else if (device.fxos()) {
  121. if (device.fxosTablet()) {
  122. _addClass("fxos tablet");
  123. } else {
  124. _addClass("fxos mobile");
  125. }
  126. } else if (device.meego()) {
  127. _addClass("meego mobile");
  128. } else {
  129. _addClass("desktop");
  130. }
  131. _handleOrientation = function() {
  132. if (device.landscape()) {
  133. _removeClass("portrait");
  134. return _addClass("landscape");
  135. } else {
  136. _removeClass("landscape");
  137. return _addClass("portrait");
  138. }
  139. };
  140. _supports_orientation = "onorientationchange" in window;
  141. _orientation_event = _supports_orientation ? "orientationchange" : "resize";
  142. if (window.addEventListener) {
  143. window.addEventListener(_orientation_event, _handleOrientation, false);
  144. } else if (window.attachEvent) {
  145. window.attachEvent(_orientation_event, _handleOrientation);
  146. } else {
  147. window[_orientation_event] = _handleOrientation;
  148. }
  149. _handleOrientation();
  150. }).call(this);
  151. function IsPC()
  152. {
  153. var userAgentInfo = navigator.userAgent;
  154. var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
  155. var flag = true;
  156. for (var v = 0; v < Agents.length; v++) {
  157. if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; }
  158. }
  159. return flag;
  160. }
  161. function iOSversion() {
  162. if (/iP(hone|od|ad)/.test(navigator.platform)) {
  163. var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
  164. return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
  165. }
  166. }