script.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  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. /* = flexslider
  168. /*-------------------------------------------------*/
  169. try {
  170. $('#carousel').flexslider({
  171. animation: "slide",
  172. controlNav: false,
  173. animationLoop: false,
  174. slideshow: false,
  175. itemWidth: 235,
  176. itemMargin: 4,
  177. asNavFor: '#slider2'
  178. });
  179. $('#slider2').flexslider({
  180. animation: "slide",
  181. controlNav: false,
  182. animationLoop: false,
  183. slideshow: false,
  184. sync: "#carousel"
  185. });
  186. } catch(err) {
  187. }
  188. try {
  189. var SliderPost = $('.flexslider');
  190. SliderPost.flexslider({
  191. slideshowSpeed: 3000,
  192. easing: "swing"
  193. });
  194. } catch(err) {
  195. }
  196. /*-------------------------------------------------*/
  197. /* = price range code
  198. /*-------------------------------------------------*/
  199. try {
  200. for( var i = 100; i <= 10000; i++ ){
  201. $('#start-val').append(
  202. '<option value="' + i + '">' + i + '</option>'
  203. );
  204. }
  205. // Initialise noUiSlider
  206. $('.noUiSlider').noUiSlider({
  207. range: [0,30],
  208. start: [5,20],
  209. handles: 2,
  210. connect: true,
  211. step: 1,
  212. serialization: {
  213. to: [ $('#start-val'),
  214. $('#end-val') ],
  215. resolution: 1
  216. }
  217. });
  218. } catch(err) {
  219. }
  220. /* ---------------------------------------------------------------------- */
  221. /* Contact Map
  222. /* ---------------------------------------------------------------------- */
  223. var contact = {"lat":"-33.880641", "lon":"151.204298"}; //Change a map coordinate here!
  224. try {
  225. var mapContainer = $('.map');
  226. mapContainer.gmap3({
  227. action: 'addMarker',
  228. marker:{
  229. options:{
  230. icon : new google.maps.MarkerImage('images/marker.png')
  231. }
  232. },
  233. latLng: [contact.lat, contact.lon],
  234. map:{
  235. center: [contact.lat, contact.lon],
  236. zoom: 15
  237. },
  238. },
  239. {action: 'setOptions', args:[{scrollwheel:false}]}
  240. );
  241. } catch(err) {
  242. }
  243. /* ---------------------------------------------------------------------- */
  244. /* magnific-popup
  245. /* ---------------------------------------------------------------------- */
  246. try {
  247. // Example with multiple objects
  248. $('.zoom').magnificPopup({
  249. type: 'image',
  250. gallery: {
  251. enabled: true
  252. }
  253. });
  254. } catch(err) {
  255. }
  256. /* ---------------------------------------------------------------------- */
  257. /* Bootstrap tabs
  258. /* ---------------------------------------------------------------------- */
  259. var tabId = $('.nav-tabs a');
  260. try{
  261. tabId.click(function (e) {
  262. e.preventDefault();
  263. $(this).tab('show');
  264. });
  265. } catch(err) {
  266. }
  267. /*-------------------------------------------------*/
  268. /* = slider Testimonial
  269. /*-------------------------------------------------*/
  270. /*
  271. var slidertestimonial = $('.bxslider');
  272. try{
  273. slidertestimonial.bxSlider({
  274. mode: 'vertical'
  275. });
  276. } catch(err) {
  277. }*/
  278. /*-------------------------------------------------*/
  279. /* = skills animate
  280. /*-------------------------------------------------*/
  281. try{
  282. var skillBar = $('.skills-progress');
  283. skillBar.appear(function() {
  284. var animateElement = $(".meter > p");
  285. animateElement.each(function() {
  286. $(this)
  287. .data("origWidth", $(this).width())
  288. .width(0)
  289. .animate({
  290. width: $(this).data("origWidth")
  291. }, 1200);
  292. });
  293. });
  294. } catch(err) {
  295. }
  296. /*-------------------------------------------------*/
  297. /* = count increment
  298. /*-------------------------------------------------*/
  299. /*try {
  300. $('.statistic-post').appear(function() {
  301. $('.timer').countTo({
  302. speed: 4000,
  303. refreshInterval: 60,
  304. formatter: function (value, options) {
  305. return value.toFixed(options.decimals);
  306. }
  307. });
  308. });
  309. } catch(err) {
  310. }*/
  311. /*-------------------------------------------------*/
  312. /* = feature box appear
  313. /*-------------------------------------------------*/
  314. try{
  315. $('.feature-box').appear(function() {
  316. $(this).addClass('active');
  317. });
  318. } catch(err) {
  319. }
  320. /* ---------------------------------------------------------------------- */
  321. /* Shop galery image replacement
  322. /* ---------------------------------------------------------------------- */
  323. var elemToShow = $('.other-products a');
  324. elemToShow.on('click', function(e){
  325. e.preventDefault();
  326. var newImg = $(this).attr('data-image');
  327. var prodHolder = $('.image-holder img');
  328. prodHolder.attr('src', newImg);
  329. });
  330. /*-------------------------------------------------*/
  331. /* = product increase
  332. /*-------------------------------------------------*/
  333. var fieldNum = $('.product-details input[type="text"]'),
  334. btnIncrease = $('button.increase'),
  335. btnDecrease = $('button.decrease');
  336. btnIncrease.on('click', function(){
  337. var fieldVal = fieldNum.val();
  338. var nextVal = parseFloat(fieldVal) + 1;
  339. fieldNum.val(nextVal);
  340. });
  341. btnDecrease.on('click', function(){
  342. var fieldVal = fieldNum.val();
  343. var nextVal = parseFloat(fieldVal) - 1;
  344. if (fieldVal > 0) {
  345. fieldNum.val(nextVal);
  346. } else {
  347. fieldNum.val(0);
  348. }
  349. });
  350. /* ---------------------------------------------------------------------- */
  351. /* Accordion
  352. /* ---------------------------------------------------------------------- */
  353. var clickElem = $('a.accord-link');
  354. clickElem.on('click', function(e){
  355. e.preventDefault();
  356. var $this = $(this),
  357. parentCheck = $this.parents('.accord-elem'),
  358. accordItems = $('.accord-elem'),
  359. accordContent = $('.accord-content');
  360. if( !parentCheck.hasClass('active')) {
  361. accordContent.slideUp(400, function(){
  362. accordItems.removeClass('active');
  363. });
  364. parentCheck.find('.accord-content').slideDown(400, function(){
  365. parentCheck.addClass('active');
  366. });
  367. } else {
  368. accordContent.slideUp(400, function(){
  369. accordItems.removeClass('active');
  370. });
  371. }
  372. });
  373. /* ---------------------------------------------------------------------- */
  374. /* Contact Form
  375. /* ---------------------------------------------------------------------- */
  376. var submitContact = $('#submit_contact'),
  377. message = $('#msg');
  378. submitContact.on('click', function(e){
  379. e.preventDefault();
  380. var $this = $(this);
  381. $.ajax({
  382. type: "POST",
  383. url: 'contact.php',
  384. dataType: 'json',
  385. cache: false,
  386. data: $('#contact-form').serialize(),
  387. success: function(data) {
  388. if(data.info !== 'error'){
  389. $this.parents('form').find('input[type=text],textarea,select').filter(':visible').val('');
  390. message.hide().removeClass('success').removeClass('error').addClass('success').html(data.msg).fadeIn('slow').delay(5000).fadeOut('slow');
  391. } else {
  392. message.hide().removeClass('success').removeClass('error').addClass('error').html(data.msg).fadeIn('slow').delay(5000).fadeOut('slow');
  393. }
  394. }
  395. });
  396. });
  397. /* ---------------------------------------------------------------------- */
  398. /* Header animate after scroll
  399. /* ---------------------------------------------------------------------- */
  400. (function() {
  401. var docElem = document.documentElement,
  402. didScroll = false,
  403. changeHeaderOn = 40;
  404. document.querySelector( 'header' );
  405. function init() {
  406. window.addEventListener( 'scroll', function() {
  407. if( !didScroll ) {
  408. didScroll = true;
  409. setTimeout( scrollPage, 100 );
  410. }
  411. }, false );
  412. }
  413. function scrollPage() {
  414. var sy = scrollY();
  415. if ( sy >= changeHeaderOn ) {
  416. $( 'header' ).addClass('active');
  417. }
  418. else {
  419. $( 'header' ).removeClass('active');
  420. }
  421. didScroll = false;
  422. }
  423. function scrollY() {
  424. return window.pageYOffset || docElem.scrollTop;
  425. }
  426. init();
  427. })();
  428. });