script.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. /*jshint jquery:true */
  2. /*global $:true */
  3. var Constant = {
  4. //根据当前环境修改
  5. serverUrl: "",
  6. query:{},
  7. };
  8. //开发环境
  9. if(window.location.href.indexOf("http://127.0.0.1:8848/")>=0){
  10. Constant.serverUrl="http://121.37.187.149/jp-group/website-server/"
  11. }
  12. if(window.location.href.indexOf("http://127.0.0.1:8848/")>=0){
  13. Constant.serverUrl="http://127.0.0.1:8086/website-server/"
  14. }
  15. if(window.location.href.indexOf("http://121.37.187.149/jp-group/")>=0){
  16. Constant.serverUrl="http://121.37.187.149/jp-group/website-server/"
  17. }
  18. getQueryVariable()
  19. function getQueryVariable()
  20. {
  21. var query = window.location.search.substring(1);
  22. query=decodeURI(query)
  23. var vars = query.split("&");
  24. for (var i=0;i<vars.length;i++) {
  25. var pair = vars[i].split("=");
  26. Constant.query[pair[0]]=pair[1];
  27. }
  28. // 链接必须带jpcode 没有就跳到首页
  29. if(!Constant.query.jpcode){
  30. if(window.location.pathname.indexOf("index.html")==-1){
  31. window.location.href="index.html";
  32. }
  33. }else{
  34. }
  35. }
  36. var $ = jQuery.noConflict();
  37. $(document).ready(function($) {
  38. "use strict";
  39. /* global google: false */
  40. /*-------------------------------------------------*/
  41. /* = portfolio isotope
  42. /*-------------------------------------------------*/
  43. var winDow = $(window);
  44. // Needed variables
  45. var $container=$('.masonry');
  46. var $filter=$('.filter');
  47. try{
  48. $container.imagesLoaded( function(){
  49. $container.trigger('resize');
  50. $container.isotope({
  51. filter:'*',
  52. layoutMode:'masonry',
  53. animationOptions:{
  54. duration:750,
  55. easing:'linear'
  56. }
  57. });
  58. $('.triggerAnimation').waypoint(function() {
  59. var animation = $(this).attr('data-animate');
  60. $(this).css('opacity', '');
  61. $(this).addClass("animated " + animation);
  62. },
  63. {
  64. offset: '75%',
  65. triggerOnce: true
  66. }
  67. );
  68. });
  69. } catch(err) {
  70. }
  71. winDow.bind('resize', function(){
  72. var selector = $filter.find('a.active').attr('data-filter');
  73. try {
  74. $container.isotope({
  75. filter : selector,
  76. animationOptions: {
  77. duration: 750,
  78. easing : 'linear',
  79. queue : false,
  80. }
  81. });
  82. } catch(err) {
  83. }
  84. return false;
  85. });
  86. // Isotope Filter
  87. $filter.find('a').click(function(){
  88. var selector = $(this).attr('data-filter');
  89. try {
  90. $container.isotope({
  91. filter : selector,
  92. animationOptions: {
  93. duration: 750,
  94. easing : 'linear',
  95. queue : false,
  96. }
  97. });
  98. } catch(err) {
  99. }
  100. return false;
  101. });
  102. var filterItemA = $('.filter li a');
  103. filterItemA.on('click', function(){
  104. var $this = $(this);
  105. if ( !$this.hasClass('active')) {
  106. filterItemA.removeClass('active');
  107. $this.addClass('active');
  108. }
  109. });
  110. $(window).imagesLoaded( function(){
  111. $('#container').addClass('active');
  112. });
  113. /*-------------------------------------------------*/
  114. /* = browser detect
  115. /*-------------------------------------------------*/
  116. try {
  117. $.browserSelector();
  118. // Adds window smooth scroll on chrome.
  119. if($("html").hasClass("chrome")) {
  120. $.smoothScroll();
  121. }
  122. } catch(err) {
  123. }
  124. /*-------------------------------------------------*/
  125. /* = Animated content
  126. /*-------------------------------------------------*/
  127. try {
  128. /* ================ ANIMATED CONTENT ================ */
  129. if ($(".animated")[0]) {
  130. $('.animated').css('opacity', '0');
  131. }
  132. $('.triggerAnimation').waypoint(function() {
  133. var animation = $(this).attr('data-animate');
  134. $(this).css('opacity', '');
  135. $(this).addClass("animated " + animation);
  136. },
  137. {
  138. offset: '75%',
  139. triggerOnce: true
  140. }
  141. );
  142. } catch(err) {
  143. }
  144. /*-------------------------------------------------*/
  145. /* = remove animation in mobile device
  146. /*-------------------------------------------------*/
  147. if ( winDow.width() < 992 ) {
  148. $('div.triggerAnimation').removeClass('animated');
  149. $('div.triggerAnimation').removeClass('triggerAnimation');
  150. }
  151. /*-------------------------------------------------*/
  152. /* = Search animation
  153. /*-------------------------------------------------*/
  154. var searchToggle = $('.open-search'),
  155. inputAnime = $(".form-search"),
  156. body = $('body');
  157. searchToggle.on('click', function(event){
  158. event.preventDefault();
  159. if ( !inputAnime.hasClass('active') ) {
  160. inputAnime.addClass('active');
  161. } else {
  162. inputAnime.removeClass('active');
  163. }
  164. });
  165. body.on('click', function(){
  166. inputAnime.removeClass('active');
  167. });
  168. var elemBinds = $('.open-search, .form-search');
  169. elemBinds.bind('click', function(e) {
  170. e.stopPropagation();
  171. });
  172. /*-------------------------------------------------*/
  173. /* = flexslider
  174. /*-------------------------------------------------*/
  175. try {
  176. $('#carousel').flexslider({
  177. animation: "slide",
  178. controlNav: false,
  179. animationLoop: false,
  180. slideshow: false,
  181. itemWidth: 235,
  182. itemMargin: 4,
  183. asNavFor: '#slider2'
  184. });
  185. $('#slider2').flexslider({
  186. animation: "slide",
  187. controlNav: false,
  188. animationLoop: false,
  189. slideshow: false,
  190. sync: "#carousel"
  191. });
  192. } catch(err) {
  193. }
  194. try {
  195. var SliderPost = $('.flexslider');
  196. SliderPost.flexslider({
  197. slideshowSpeed: 3000,
  198. easing: "swing"
  199. });
  200. } catch(err) {
  201. }
  202. /*-------------------------------------------------*/
  203. /* = price range code
  204. /*-------------------------------------------------*/
  205. try {
  206. for( var i = 100; i <= 10000; i++ ){
  207. $('#start-val').append(
  208. '<option value="' + i + '">' + i + '</option>'
  209. );
  210. }
  211. // Initialise noUiSlider
  212. $('.noUiSlider').noUiSlider({
  213. range: [0,30],
  214. start: [5,20],
  215. handles: 2,
  216. connect: true,
  217. step: 1,
  218. serialization: {
  219. to: [ $('#start-val'),
  220. $('#end-val') ],
  221. resolution: 1
  222. }
  223. });
  224. } catch(err) {
  225. }
  226. /* ---------------------------------------------------------------------- */
  227. /* Contact Map
  228. /* ---------------------------------------------------------------------- */
  229. var contact = {"lat":"-33.880641", "lon":"151.204298"}; //Change a map coordinate here!
  230. try {
  231. var mapContainer = $('.map');
  232. mapContainer.gmap3({
  233. action: 'addMarker',
  234. marker:{
  235. options:{
  236. icon : new google.maps.MarkerImage('images/marker.png')
  237. }
  238. },
  239. latLng: [contact.lat, contact.lon],
  240. map:{
  241. center: [contact.lat, contact.lon],
  242. zoom: 15
  243. },
  244. },
  245. {action: 'setOptions', args:[{scrollwheel:false}]}
  246. );
  247. } catch(err) {
  248. }
  249. /* ---------------------------------------------------------------------- */
  250. /* magnific-popup
  251. /* ---------------------------------------------------------------------- */
  252. try {
  253. // Example with multiple objects
  254. $('.zoom').magnificPopup({
  255. type: 'image',
  256. gallery: {
  257. enabled: true
  258. }
  259. });
  260. } catch(err) {
  261. }
  262. /* ---------------------------------------------------------------------- */
  263. /* Bootstrap tabs
  264. /* ---------------------------------------------------------------------- */
  265. var tabId = $('.nav-tabs a');
  266. try{
  267. tabId.click(function (e) {
  268. e.preventDefault();
  269. $(this).tab('show');
  270. });
  271. } catch(err) {
  272. }
  273. /*-------------------------------------------------*/
  274. /* = slider Testimonial
  275. /*-------------------------------------------------*/
  276. /*
  277. var slidertestimonial = $('.bxslider');
  278. try{
  279. slidertestimonial.bxSlider({
  280. mode: 'vertical'
  281. });
  282. } catch(err) {
  283. }*/
  284. /*-------------------------------------------------*/
  285. /* = skills animate
  286. /*-------------------------------------------------*/
  287. try{
  288. var skillBar = $('.skills-progress');
  289. skillBar.appear(function() {
  290. var animateElement = $(".meter > p");
  291. animateElement.each(function() {
  292. $(this)
  293. .data("origWidth", $(this).width())
  294. .width(0)
  295. .animate({
  296. width: $(this).data("origWidth")
  297. }, 1200);
  298. });
  299. });
  300. } catch(err) {
  301. }
  302. /*-------------------------------------------------*/
  303. /* = count increment
  304. /*-------------------------------------------------*/
  305. /*try {
  306. $('.statistic-post').appear(function() {
  307. $('.timer').countTo({
  308. speed: 4000,
  309. refreshInterval: 60,
  310. formatter: function (value, options) {
  311. return value.toFixed(options.decimals);
  312. }
  313. });
  314. });
  315. } catch(err) {
  316. }*/
  317. /*-------------------------------------------------*/
  318. /* = feature box appear
  319. /*-------------------------------------------------*/
  320. try{
  321. $('.feature-box').appear(function() {
  322. $(this).addClass('active');
  323. });
  324. } catch(err) {
  325. }
  326. /* ---------------------------------------------------------------------- */
  327. /* Shop galery image replacement
  328. /* ---------------------------------------------------------------------- */
  329. var elemToShow = $('.other-products a');
  330. elemToShow.on('click', function(e){
  331. e.preventDefault();
  332. var newImg = $(this).attr('data-image');
  333. var prodHolder = $('.image-holder img');
  334. prodHolder.attr('src', newImg);
  335. });
  336. /*-------------------------------------------------*/
  337. /* = product increase
  338. /*-------------------------------------------------*/
  339. var fieldNum = $('.product-details input[type="text"]'),
  340. btnIncrease = $('button.increase'),
  341. btnDecrease = $('button.decrease');
  342. btnIncrease.on('click', function(){
  343. var fieldVal = fieldNum.val();
  344. var nextVal = parseFloat(fieldVal) + 1;
  345. fieldNum.val(nextVal);
  346. });
  347. btnDecrease.on('click', function(){
  348. var fieldVal = fieldNum.val();
  349. var nextVal = parseFloat(fieldVal) - 1;
  350. if (fieldVal > 0) {
  351. fieldNum.val(nextVal);
  352. } else {
  353. fieldNum.val(0);
  354. }
  355. });
  356. /* ---------------------------------------------------------------------- */
  357. /* Accordion
  358. /* ---------------------------------------------------------------------- */
  359. var clickElem = $('a.accord-link');
  360. clickElem.on('click', function(e){
  361. e.preventDefault();
  362. var $this = $(this),
  363. parentCheck = $this.parents('.accord-elem'),
  364. accordItems = $('.accord-elem'),
  365. accordContent = $('.accord-content');
  366. if( !parentCheck.hasClass('active')) {
  367. accordContent.slideUp(400, function(){
  368. accordItems.removeClass('active');
  369. });
  370. parentCheck.find('.accord-content').slideDown(400, function(){
  371. parentCheck.addClass('active');
  372. });
  373. } else {
  374. accordContent.slideUp(400, function(){
  375. accordItems.removeClass('active');
  376. });
  377. }
  378. });
  379. /* ---------------------------------------------------------------------- */
  380. /* Contact Form
  381. /* ---------------------------------------------------------------------- */
  382. var submitContact = $('#submit_contact'),
  383. message = $('#msg');
  384. submitContact.on('click', function(e){
  385. e.preventDefault();
  386. var $this = $(this);
  387. $.ajax({
  388. type: "POST",
  389. url: 'contact.php',
  390. dataType: 'json',
  391. cache: false,
  392. data: $('#contact-form').serialize(),
  393. success: function(data) {
  394. if(data.info !== 'error'){
  395. $this.parents('form').find('input[type=text],textarea,select').filter(':visible').val('');
  396. message.hide().removeClass('success').removeClass('error').addClass('success').html(data.msg).fadeIn('slow').delay(5000).fadeOut('slow');
  397. } else {
  398. message.hide().removeClass('success').removeClass('error').addClass('error').html(data.msg).fadeIn('slow').delay(5000).fadeOut('slow');
  399. }
  400. }
  401. });
  402. });
  403. /* ---------------------------------------------------------------------- */
  404. /* Header animate after scroll
  405. /* ---------------------------------------------------------------------- */
  406. (function() {
  407. var docElem = document.documentElement,
  408. didScroll = false,
  409. changeHeaderOn = 40;
  410. document.querySelector( 'header' );
  411. function init() {
  412. window.addEventListener( 'scroll', function() {
  413. if( !didScroll ) {
  414. didScroll = true;
  415. setTimeout( scrollPage, 100 );
  416. }
  417. }, false );
  418. }
  419. function scrollPage() {
  420. var sy = scrollY();
  421. if ( sy >= changeHeaderOn ) {
  422. $( 'header' ).addClass('active');
  423. }
  424. else {
  425. $( 'header' ).removeClass('active');
  426. }
  427. didScroll = false;
  428. }
  429. function scrollY() {
  430. return window.pageYOffset || docElem.scrollTop;
  431. }
  432. init();
  433. })();
  434. });