script.js 12 KB

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