script.js 13 KB

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