眼镜h5
// 填充博乐纯门店数据 (function() { var $biotrueCitySelect = $('.regional-popup select.city'); jQuery.each(storedata.biotrue, function(i, item) { if (item) { var city = item[0]; var name = item[1]; var address = item[2]; var tel = item[3]; var cityData = $biotrueCitySelect.data(city); if (!cityData) { var cityData = {}; $biotrueCitySelect.data(city, cityData) cityData.$option = $('<option>').text(city).val(city).appendTo($biotrueCitySelect.find('optgroup')); cityData.$list = $('<div class="store-list"><ul></ul></div>').appendTo('.regional-popup'); } var $li = $('<li>'); $('<p class="name">').text(name).appendTo($li); $('<p class="addr">').text(address).wrapInner('<span></span>').appendTo($li); $('<p class="tel">').text(tel).wrapInner('<span></span>').appendTo($li); cityData.$list.find('ul').append($li); } }); $biotrueCitySelect.val(''); })(); // 填充合作商门店数据 (function() { var $buttons = $('.dealer-popup .buttons'); for (var dealer in storedata) { if (dealer == 'biotrue') { continue; } var $button = $('<a href="javascript:;"></a>').appendTo($buttons); $button.data('dealer', dealer).css({backgroundImage: 'url("/images/btn-'+dealer+'.png")'}); var stores = storedata[dealer]; var $container = $('<div class="store-list"><ul></ul></div>'); $container.data('dealer', dealer); var $ul = $container.find('ul'); jQuery.each(stores, function(i, item) { if (item) { var city = item[0]; var name = item[1]; var address = item[2]; var tel = item[3]; var $li = $('<li>'); $('<p class="name">').text(name).appendTo($li); $('<p class="addr">').text(address).wrapInner('<span></span>').appendTo($li); $('<p class="tel">').text(tel).wrapInner('<span></span>').appendTo($li); $li.appendTo($ul); } }); $container.appendTo('.dealer-popup'); } })(); // 屏幕尺寸监测 (function () { function checkScreen() { if (document.documentElement.clientHeight < document.documentElement.clientWidth) { var $msg = $('<div>为了达到最佳的体验效果,建议您使用竖屏浏览</div>').appendTo('body'); $msg.css({ position: 'fixed', top: 0, left: '50%', padding: '.5em', background: 'rgba(0,0,0,.8)', color: '#fbfcc5', zIndex: 1, whiteSpace: 'nowrap', opacity: 0, borderRadius: '.5em' }); $msg.css({ marginLeft: -$msg.width() / 2 }); $msg.animate({ opacity: 1 }, 500).delay(2000).animate({ opacity: 0 }, 500, function () { $msg.remove(); }) } } function scaleContent() { setTimeout(function() { $('.scale-container').each(function(i, elem) { var $container = $(this); var t = parseFloat($container.css('top')); var b = parseFloat($container.css('bottom')); var h = parseFloat($container.height()); var ph = $container.parent().height(); $container.children('.scale-content').each(function(i, elem) { var hContent = $(this).height(); if (h <= hContent) { var scale = (ph-t-b) / hContent; scale = Math.max(0, scale); $(this).css({transform: 'scale('+scale+') '}); } else { $(this).css({transform: ''}); } $(this).toggleClass('scale-enabled', h<=hContent); }); }); }); } // var $pageContent = $('.page-content'); $(window).resize(function () { // $pageContent.height(window.document.documentElement); checkScreen(); scaleContent(); }); checkScreen(); scaleContent(); })(); // 定义loading及各slide动画 (function () { // var imgList = 'bottom-icons.png,digits.png,droplet1.png,droplet2.png,droplet3.png,droplet4.png,droplet5.png,droplet6.png,hr.png,light-mask.png,light-ray.png,loading-bg.jpg,loading-mask.png,loading-outline.png,logo-white.png,logo.png,s1-drop6.png,s1-eye.jpg,s1-text.png,s2-bg.jpg,s3-text1.png,s3-text2.png,s4-clock-bg.png,s4-glasses.png,s4-moon.png,s4-sun.png,s4-text1.png,s4-text2.png,s5-chart-new-3.png,s5-chart-new.png,s5-chart.png,s5-text1.png,s6-glass.jpg,s6-protect.png,s6-text1.png,s7-product.jpg,s8-product.jpg,water-text-1.png,water-text-2.png,wave.png,wave0.png,'; var imgList = 'bottom-icons.png,digits.png,droplet1.png,droplet2.png,droplet3.png,droplet4.png,droplet5.png,droplet6.png,hr.png,light-mask.png,light-ray.png,loading-bg.jpg,loading-mask.png,loading-outline.png,logo-white.png,logo.png,s1-drop6.png,s1-eye.jpg,s1-text.png,s2-bg.jpg,s3-text1.png,s3-text2.png,s4-glasses.png,s4-text1.png,s4-text2.png,s5-chart-new-3.png,s5-chart-new.png,s5-chart.png,s5-text1.png,s6-glass.jpg,s6-protect.png,s6-text1.png,s7-product.jpg,s8-product.jpg,water-text-1.png,water-text-2.png,wave.png,wave0.png,'; imgList = imgList.match(/[^,]+/g); $('<img src="/images/loading-outline.png">').load(function(e) { $('.loading-icon').show(); var imgProgress = 0; var timeProgress = 0; function updateProgress() { var progress = Math.min(imgProgress, timeProgress); $('.loading-icon .mask-rotate').each(function(i, elem) { var angle = -360 * progress; var maskAngle = angle - 90 + 90 * i; maskAngle = Math.min(maskAngle, 0); maskAngle = Math.max(maskAngle, -180); $(this).css({transform: 'rotate('+maskAngle+'deg)'}); }); if (progress == 1) { initSlideAnim(); var swiper = $('.swiper-container').data('swiper'); swiper.slideTo(0, 0); new TimelineLite({onComplete: function() { if (swiper.activeIndex != 0) { swiper.slideTo(0, 0); } else { var slide = swiper.slides[swiper.activeIndex]; var tl = $(slide).data('tl'); tl && tl.play(0); } }}).to('.loading', 1, {opacity: 0}) .set('.loading', {display: 'none'}) .set('.swiper-container', {display: 'block'}) .from('.swiper-container', 1, {opacity: 0}, 0) .timeScale(3) ; } } var loadedCount = 0; $.each(imgList, function(i, item) { $('<img>').prop({src: '/images/' + item}).on('load error', function(e) { loadedCount++; imgProgress = loadedCount/imgList.length updateProgress(); }); }); $({p:0}).animate({p:1}, {duration: 2000, progress: function(animation, progress, remainingMs) { timeProgress = this.p; updateProgress(); }}); }); function initSlideAnim() { var $container = $('.swiper-container'); var html = $container.find('script[type="text/template"]').html(); $container.empty().append($.parseHTML(html)); $(window).resize(); // 确保内容可缩放。 // $.parseHTML(html); var $swiperWrapper = $container.find('.swiper-wrapper'); // $swiperWrapper.appendTo('.swiper-container'); $('.swiper-slide').each(function (i, elem) { var tl = new TimelineLite({ paused: true }); var $slide = $(this); $slide.data().tl = tl; }); $('.slide-1').each(function (i, elem) { var $slide = $(this); var tl = $slide.data().tl; var $drops2 = $slide.find('.drops-2'); var $drop = $drops2.find('.drop'); var delay = 0; var wh = $('.page-content').height(); tl .delay(delay) .from('.s1-text', 1, { opacity: 0 }, 1) .from('.s1-eye', 1, { opacity: 0 }, 1) .from($slide.find('.droplet-2, .droplet-5'), 3, {opacity: 0, y: -100}, 1) .from($slide.find('.droplet-1, .droplet-4'), 3, {opacity: 0, y: -150}, 1) //.from($slide.find('.droplet-3, .droplet-6'), 2, {opacity: 0, y: -50}, 'far') .from($drops2, 4, { opacity: 0, bottom: '100%', ease: Power1.easeOut }, 1) .to($slide.find('.droplet-1'), 2, {y: 5, yoyo: true, repeat: -1, ease: Sine.easeInOut}, 4) .to($slide.find('.droplet-4'), 2, {y: -5, yoyo: true, repeat: -1, ease: Sine.easeInOut}, 4.2) .timeScale(2.5) ; }); $('.slide-2').each(function (i, elem) { var $slide = $(this); var tl = $slide.data().tl; var $p = $slide.find('.texts p'); $p.each(function(i, elem) { var $this = $(this); var letters = $this.text().match(/./g); $this.empty(); jQuery.each(letters, function(i, item) { $('<span>').text(item).appendTo($this); }); }); tl.staggerFrom($p.find('span'), .5, { opacity: 0, x: -20}, .05) .from($slide.find('.glass'), .5, { opacity: 0, y: 50, scale: 1.5}, 1.5) .timeScale(1.5) ; }); $('.slide-3').each(function (i, elem) { var $slide = $(this); var slideData = $slide.data(); var $water = $slide.find('.water'); var $defaultWater = $water.not('.reverse-water'); var $reverseWater = $water.filter('.reverse-water'); var timeScale = 3; var tlLow = new TimelineLite(); tlLow .from($water.filter('.low-water'), 2, { bottom: '-50%', opacity: 0 }) .from($slide.find('.water-text-2'), 1, { opacity: 0 }, '-=.2') .from($water.filter('.high-water'), 2, { bottom: '-50%', opacity: 0 }, 3) .to($slide.find('.text-2,.water-0'), .5, { opacity: 0 }, '-=1') .from($slide.find('.water-text-1'), 1, { opacity: 0 }, '-=.2') .timeScale(timeScale) ; var tlWave = new TimelineLite(); tlWave .to($defaultWater, 1.5, { left: '-' + ($defaultWater.width() / 3), ease: Linear.easeIn, repeat: -1 }, 0) .to($reverseWater, 1.5, { right: '-' + ($defaultWater.width() / 3), ease: Linear.easeIn, repeat: -1 }, 0) ; slideData.tl.add([tlLow, tlWave]); }); $('.slide-4').each(function (i, elem) { var $slide = $(this); var tl = $slide.data().tl; tl .add('begin', 0) .to($slide.find('.compare-col-1 .glass-frame-1'), 1, {opacity: 0}, 2) .fromTo($slide.find('.compare-col-1 .glass-frame-2'), 1, {opacity: 0}, {opacity: 1}, 2) .to($slide.find('.compare-col-1 .glass-frame-2'), 1, {opacity: 0}, 6) .fromTo($slide.find('.compare-col-1 .glass-frame-3'), 1, {opacity: 0}, {opacity: 1}, 6) ; for (var i = 0; i < 8; i++) { tl.to($slide.find('.compare-col-1 .time .digit'), .2, {top: -150*(i+1), delay: .8}, i); } for (var i = 0; i < 16; i++) { tl.to($slide.find('.compare-col-2 .time .digit').last(), .2, {top: -150*(i+1), delay: .8}, i); } for (var i = 0; i < 1; i++) { tl.to($slide.find('.compare-col-2 .time .digit').last().prev(), .2, {top: -150*(i+1), delay: .8}, 10*(i+1)-1); } tl .fromTo($slide.find('.compare-col-1 .sun'), 8, {top: 100}, {top: 0, ease: Linear.easeIn}, 0) .fromTo($slide.find('.compare-col-2 .sun'), 16, {top: 100}, {top: -100, ease: Linear.easeIn}, 0) .fromTo($slide.find('.compare-col-1 .moon'), 8, {top: 280}, {top: 160, ease: Linear.easeIn}, 0) .fromTo($slide.find('.compare-col-2 .moon'), 16, {top: 280}, {top: 40, ease: Linear.easeIn}, 0) //.to($slide.find('.compare-col-1 .plate .bg'), 8, {left: -(452-172)/2, ease: Linear.easeIn}, 0) //.to($slide.find('.compare-col-2 .plate .bg'), 16, {left: -(452-172), ease: Linear.easeIn}, 0) //.set($slide.find('.plate .bg'), {left: -(452-172)/2, ease: Linear.easeIn}, 0) .to($slide.find('.compare-col-1 .h-pointer'), 8, {rotation: '+='+(30*8), ease: Linear.easeIn}, 0) .to($slide.find('.compare-col-1 .m-pointer'), 1, {rotation: '+=360', ease: Linear.easeIn, repeat: 8-1 }, 0) .to($slide.find('.compare-col-2 .h-pointer'), 16, {rotation: '+='+(30*16), ease: Linear.easeIn}, 0) .to($slide.find('.compare-col-2 .m-pointer'), 1, {rotation: '+=360', ease: Linear.easeIn, repeat: 16-1 }, 0) .timeScale(6) ; return; // 以下为废弃代码 tl.add(createColTimeline($slide.find('.compare-col-1'), 8), 0); tl.add(createColTimeline($slide.find('.compare-col-2'), 16), 0); tl.eventCallback('onStart', function () { $.each(this.getChildren(false), function (i, item) { this.play(0); }); }); tl.timeScale(4); function createColTimeline($col, duration) { var tl = new TimelineMax(); tl.add(createGlassTimeline($col.find('.glass'), duration), 0); tl.add(craeteTimeTimeline($col.find('.time')), 0); tl.add(createClockTimeline($col), 0); tl.addPause(duration); return tl; } function createGlassTimeline($glass, duration) { var $frame = $glass.find('.glass-frame'); var stepDuration = Math.ceil(duration / $frame.length); var tl = new TimelineLite(); var $currentFrame = $frame.first(); var animDuration = Math.min(stepDuration, 1); var delay = stepDuration - animDuration; while ($currentFrame.length) { // 非第一个 if ($currentFrame.prev().length) { tl.fromTo($currentFrame, animDuration, { opacity: 0 }, { opacity: 1 }, '-=' + animDuration); } // 第一个 else { tl.set($currentFrame, { opacity: 1 }); } // 非最后一个 if ($currentFrame.next().length) { tl.to($currentFrame, animDuration, { opacity: 0, delay: delay }); } $currentFrame = $currentFrame.next(); } return tl; } function createClockTimeline($col) { var tl = new TimelineLite(); tl .fromTo($col.find('.sun'), 16.1, {top: 100}, {top: -100, ease: Linear.easeIn}, 0) .from($col.find('.moon'), 16.1, {top: 270, ease: Linear.easeIn}, 0) .to($col.find('.plate .bg'), 16.1, {left: -(452-172), ease: Linear.easeIn}, 0) .to($col.find('.h-pointer'), 12, {force3D:false, rotation: '+=360', ease: Linear.easeIn, repeat: -1 }, 0) .to($col.find('.m-pointer'), 1, {force3D:false, rotation: '+=360', ease: Linear.easeIn, repeat: -1 }, 0); return tl; } /** * 时间数字增长的效果。每秒增长一个数字。 */ function craeteTimeTimeline($time) { var tl = new TimelineLite(); var $digit = $time.find('.digit'); $digit.each(function (i, elem) { var digitPosition = $digit.length - i; var stepDuration = Math.pow(10, digitPosition - 1); tl.add(createDigitTimeline($(this), stepDuration, digitPosition > 1), 0); }); return tl; } /** * 单个数字滑动切换的效果。stepDuration * $digit 数字元素包装 * stepDuration 一次切换经过的时长(秒) */ function createDigitTimeline($digit, stepDuration, notFromZero) { stepDuration = stepDuration || 1; var $bg = $digit.find('.bg'); var h = $digit.height(); var delay = stepDuration - .3; var tl = new TimelineLite(); // 不是最后一个数字,则不显示第一个0 if (notFromZero) { tl.set($bg, { marginTop: h, backgroundPosition: '0 -' + h + 'px' }, 0); } tl.to($bg, .3, { top: -h, delay: delay }); tl.set($bg, { marginTop: 0, backgroundPosition: '0 0' }); var tlRepeat = new TimelineMax(); tlRepeat.repeat(-1); $.each(new Array(10), function (i, elem) { tlRepeat.to($bg, .3, { top: -h * (i + 2), delay: delay }) }); return tl.add(tlRepeat); } }); $('.slide-5').each(function (i, elem) { var $slide = $(this); var tl = $slide.data().tl; tl .from($slide.find('.chart-new-1, .chart-new-3'), 2, { height: 0 }, 0) .from($slide.find('.chart-new-2'), 2, { width: 0 }, 0) .timeScale(1.5) ; }); $('.slide-6').each(function (i, elem) { var $slide = $(this); var tl = $slide.data().tl; tl .fromTo($slide.find('.light-ray'), 2, { top: '-80%' }, { top: '130%', ease: Linear.easeIn, repeat: -1 }, 0) ; }); // 应用swiper插件 (function () { var swiper = new Swiper('.swiper-container', { pagination: '.swiper-pagination', paginationClickable: true, direction: 'vertical', hashnav: false, onSlideChangeEnd: onSlideChangeEnd }); function onSlideChangeEnd(swiper) { // 播放切入的slide var slide = swiper.slides[swiper.activeIndex]; var tl = $(slide).data().tl; jQuery.each([].concat(tl), function(i, item) { if (item) { item.play(0); } }); // 停止切出的slide, var prevSlide = swiper.slides[swiper.previousIndex]; prevTl = $(prevSlide).data().tl; jQuery.each([].concat(prevTl), function(i, item) { if (item) { item.pause(0); } }); // 更新logo var tlLogo = new TimelineLite(); $(slide).each(function(i, elem) { var isWhite = !!+$(this).data('logo-white'); var opacityLogo = +!isWhite; var opacityLogoWhite = +isWhite; tlLogo.to($('.hud .logo').not('.logo-white'), .2, {opacity: opacityLogo}, 0) .to($('.hud .logo-white'), .2, {opacity: opacityLogoWhite}, 0) ; }); // 更新bottom var tlBottom = new TimelineLite(); var bottomHL = $(slide).data('bottom-hl'); if (bottomHL) { $('.bottom').show(); tlBottom.to('.bottom', .2, { opacity: 1}); tlBottom.to('.bottom .highlight-shim', .2, { left: (bottomHL - 1) * 25 + '%' }, 0); } else { tlBottom.to('.bottom', .2, { opacity: 0, onComplete: function() { $('.bottom').hide(); }}) } //console.log(tl, prevTl); // 初始化门店页,隐藏门店列表 $('.slide-8 em').css({opacity: 0}); $('.store-list').hide(); } onSlideChangeEnd(swiper); })(); // 定义功能交互 // 绑定页面跳转按钮 (function() { $('[data-slide-to]').click(function(e) { var selector = $(this).data('slide-to'); var $container = $('.swiper-container'); var swiper = $container.data('swiper'); var index = $(selector).index(); try { swiper.slideTo(index); } catch (e) { console.error(e); } }); $('.btn-search-store').click(function(e) { showSearchStorePopup(); }); $('.btn-apply-now').click(function(e) { showApplyNowPopup(); }); })(); // 查找门店功能 (function() { return; // 将废弃 // 门店查询控件事件 $('.fake-select select').each(function(i, elem) { var $select = $(this); $select.data().$selectedText = $select.closest('.fake-select').find('.selected-text'); var $em = $(this).siblings('em'); $em.data().tl = new TimelineLite({paused: true}).fromTo($em, .1, {opacity: 0}, {opacity: 1, repeat: 4, yoyo: true}); }); $('.fake-select select.city').change(function(e) { var $option = $(this).find('option:selected'); var areas = $option.data('areas') || ''; var areaArray = areas.match(/[^,]+/g) || []; var emptyOption = new Option(); emptyOption.selected = true; $('select.area').empty().append(emptyOption).change(); jQuery.each(areaArray, function(i, item) { $('select.area').append(new Option(item, item)); }); }); $('.fake-select select').change(function(e) { $(this).data().$selectedText.text($(this).val()); }); $('.find-store').click(function(e) { $(this).closest('.form').find('select').each(function(i, elem) { var $em = $(this).siblings('em'); var tl = $em.data('tl'); if (this.value) { tl.pause(0); } else { tl.play(0); } }); var city = $('select.city').val(); var area = $('select.area').val(); if (city && area) { $('.store-list').show().find('li').each(function(i, elem) { var data = $(this).data(); $(this).toggle(data.city == city && data.area == area); }); } }); $('.change-city').click(function(e) { $('.store-list').hide(); }); })(); // 自定义兼容HTML5 ValidityState 的jQuery validation插件 (function($) { var defaults = {}; $.fn.validate = function(options) { return this.each(function() { var settings = $.extend({}, defaults, options); //if (!this.validity) { // 某些旧浏览器貌似对validationMessage支持不完善, // 所以在此处强制判断有效性,并保存在 validationMessage2 中。 var required = $(this).is('[required]'); var pattern = $(this).attr('pattern'); this.validationMessage2 = ''; if (required && !this.value) { this.validationMessage2 = '请填写此字段。'; } else if (pattern != void(0) && !this.value.match(new RegExp(pattern))) { this.validationMessage2 = '请与所请求的格式保持一致。'; } try { this.validationMessage = this.validationMessage2; } catch (e) { // IE10+ strict 模式不允许对只读属性赋值 } //} }); }; $.fn.valid = function(options) { var valid; this.first().each(function(i, elem) { var required = $(this).is('[required]'); var pattern = $(this).attr('pattern'); this.validationMessage2 = ''; if (required && !this.value) { this.validationMessage2 = '请填写此字段。'; } else if (pattern != void(0) && !this.value.match(new RegExp(pattern))) { this.validationMessage2 = '请与所请求的格式保持一致。'; } try { this.validationMessage = this.validationMessage2; } catch (e) { // IE10+ strict 模式不允许对只读属性赋值 } valid = !(this.validationMessage || this.validationMessage2); }); return valid; }; })(jQuery); // 申领功能 (function() { var $popup = $('.apply-now-popup'); var $form = $popup.find('.apply-form'); var action2ajax = {}; //$popup.data('action2ajax', $.extend($form.data('action2ajax'), {})).data('action2ajax'); var QueryTodayOfInventory = '/OneDay_Product/QueryTodayOfInventory'; //查询今日免费申领次数库存 var QueryCannotGetProducts = '/OneDay_Product/QueryCannotGetProducts'; //查询已无库存的产品 var AuthCodeValidate = '/OneDay_Product/AuthCodeValidate';//发送短信验证码 var ApplySample = '/OneDay_Product/ApplySample';//申领小样 var countdownPromise; // 发短信倒计时 function closePopup() { $popup.hide(); for (var action in action2ajax) { var ajax = action2ajax[action]; try { ajax.abort(); } catch (e) { // noop } } } function showLoading() { $popup.find('.loading-popup').show().siblings('.popup').hide(); } function showApplySuccess() { $popup.find('.apply-success-popup').show().siblings('.popup').hide(); } function hideSubPopup() { $popup.find('.popup').hide(); } function showApplyRunOut() { $popup.find('.apply-run-out-popup').show().siblings('.popup').hide(); } window.showApplyNowPopup = function() { $popup.show(); // $form.find(':input').val(''); //清空表单 // 查询当前是否为可申领状态 // 当还未查询过时,才继续执行查询状态 if (!action2ajax[QueryTodayOfInventory]) { showLoading(); var ajax; action2ajax[QueryTodayOfInventory] = $.post(QueryTodayOfInventory); action2ajax[QueryTodayOfInventory].done(function(data, textStatus, jqXHR) { // 可以申领 if (data.result == 1) { // 显示立即申领,隐藏二级弹框 hideSubPopup(); $form.find(':input').val(''); //清空表单 // 初始化申领列表 action2ajax[QueryCannotGetProducts] = $.post(QueryCannotGetProducts).done(function(data, textStatus, jqXHR) { var list = '-1.00,-1.25,-1.50,-1.75,-2.00,-2.25,-2.50,-2.75,-3.00,-3.25,-3.50,-3.75,-4.00,-4.25,-4.50,-4.75,-5.00,-5.25,-5.50,-5.75,-6.00,-6.25,-6.50,-7.00,-7.50,-8.00,-8.50,-9.00'.match(/[^,]+/g); var nisSet = {}; // not in stock if (data.result == 1) { jQuery.each(data.list.match(/[^,]+/g), function(i, item) { nisSet[item] = true; }); } var $select = $('.apply-now-popup select.degrees'); var $optgroup = $select.find('optgroup').empty(); // $(new Option).val('').text('请选择').appendTo($select); jQuery.each(list, function(i, item) { if (!nisSet[item]) { $(new Option).val(item).text(item).appendTo($optgroup); } }); $select.val(''); $select.trigger('change', [true]); // 触发change事件以填充模拟的文本框。 }); } // 当前无法申领 else { action2ajax[QueryTodayOfInventory] = null; // 当对话框可见(未关闭时) $popup.filter(':visible').each(function(i, elem) { // 已申领完 if (data.result == 0) { showApplyRunOut(); } else { alert('不在活动时间范围内。'); closePopup(); } }); } }).fail(function(jqXHR, textStatus, errorThrown) { action2ajax[QueryTodayOfInventory] = null; // 如果存在可见的popup,再弹框 $popup.filter(':visible').each(function(i, elem) { alert('网络错误,请稍候再试。'); closePopup(); }); }); } else { // 已查询过状态,则直接显示弹层,不做其它处理 hideSubPopup(); } /* // 查询当前是否为可申领状态 // 当目前不存在正在查询的请求时,才继续执行 if ($.when(action2ajax[QueryTodayOfInventory]).state() != 'pending') { showLoading(); action2ajax[QueryTodayOfInventory] = $.post(QueryTodayOfInventory).done(function(data, textStatus, jqXHR) { // 可以申领 if (data.result == 1) { // 显示立即申领,隐藏二级弹框 hideSubPopup(); // 初始化申领列表 action2ajax[QueryCannotGetProducts] = $.post(QueryCannotGetProducts).done(function(data, textStatus, jqXHR) { var list = '-1.00,-1.25,-1.50,-1.75,-2.00,-2.25,-2.50,-2.75,-3.00,-3.25,-3.50,-3.75,-4.00,-4.25,-4.50,-4.75,-5.00,-5.25,-5.50,-5.75,-6.00,-6.25,-6.50,-7.00,-7.50,-8.00,-8.50,-9.00'.match(/[^,]+/g); var nisSet = {}; // not in stock if (data.result == 1) { jQuery.each(data.list.match(/[^,]+/g), function(i, item) { nisSet[item] = true; }); } var $select = $('.apply-now-popup select.degrees'); var $optgroup = $select.find('optgroup').empty(); // $(new Option).val('').text('请选择').appendTo($select); jQuery.each(list, function(i, item) { if (!nisSet[item]) { $(new Option).val(item).text(item).appendTo($optgroup); } }); $select.val(''); $select.trigger('change', [true]); // 触发change事件以填充模拟的文本框。 }); } // 当前无法申领 else { // 当对话框可见(未关闭时) $popup.filter(':visible').each(function(i, elem) { // 已申领完 if (data.result == 0) { showApplyRunOut(); } else { alert('不在活动时间范围内。'); closePopup(); } }); } }).fail(function(jqXHR, textStatus, errorThrown) { $popup.filter(':visible').each(function(i, elem) { alert('网络错误,请稍候再试。'); closePopup(); }); }); } */ }; $popup.find('.close-btn').click(function(e) { closePopup(); }); // 解决弹出的键盘把文本框遮住的问题 $form.find(':input').on('focus select', function(e) { var field = this; setTimeout(function() { try { field.scrollIntoViewIfNeeded(); } catch (e) { } }, 500); }); // 修改表单项时,更新错误消息。 $form.find(':input').on('blur change', function(e, doNotValidate) { if (!doNotValidate) { $(this).closest('label').find('.error-message').toggle(!$(this).valid()); } }); // 选择select $form.find('select').change(function(e) { var $text = $(this).closest('.select').find('.select-text'); var text = $(this).find('option:selected').text(); $text.text(text); }); // 点击发送验证码 $('.send-auth-code,.resend-auth-code').click(function(e) { e.preventDefault(); // 判断上一次发送验证码间隔时间是否结束 if ($.when(action2ajax[AuthCodeValidate], countdownPromise).state() == 'pending') { return; } // 手机号填写正确则发送验证码 var $mobile = $form.find('[name="mobile"]'); $.Deferred(function(deferred) { var fieldValid = $mobile.valid(); $mobile.closest('label').find('.error-message').toggle(!fieldValid); if (!fieldValid) { $mobile.focus().select(); } fieldValid || deferred.reject(); deferred.resolve(); /* $mobile.validate().each(function(i, elem) { var fieldValid = !this.validationMessage; $(this).closest('label').find('.error-message').toggle(!fieldValid); if (!fieldValid) { try { $(this).select()[0].scrollIntoViewIfNeeded(); } catch (e) { // noop } } fieldValid || deferred.reject(); }); deferred.resolve(); */ }).done(function() { $('.send-auth-code').hide(); $('.auth-code-sent').show(); $('.auth-code-message').text('正在发送验证码,请稍候……'); action2ajax[AuthCodeValidate] = $.post(AuthCodeValidate, {mobile: $mobile.val()}); action2ajax[AuthCodeValidate].always(function() { $('.auth-code-message').text('验证码发送失败'); }).done(function(data, textStatus, jqXHR) { switch (data.result) { case -1: alert('无法识别的手机号'); break; case 1: $('.auth-code-message').text('验证码发送成功'); break; case 2: alert('不在活动时间范围内'); break; case 3: alert('此手机号已领取过'); break; case 4: alert('当日名额已领完'); break; case 5: default: $('.auth-code-message').text('系统繁忙,请稍候再试。'); break; } }).fail(function(jqXHR, textStatus, errorThrown) { $('.auth-code-message').text('网络错误,请稍候再试。'); }).done(function(data, textStatus, jqXHR) { // 发送成功后倒计时 if (data.result == 1) { countdownPromise = $.Deferred(function(deferred) { var t = new Date; t.setSeconds(t.getSeconds() + 60); function checkTime() { if (deferred.state() == 'pending') { var t1 = new Date; if (t1 < t) { var s = Math.ceil((t-t1) / 1000); deferred.notify(s); setTimeout(checkTime, 1000); } else { deferred.resolve(); } } } checkTime(); }).promise().done(function() { $('.resend-auth-code').text('重新发送验证码'); }).progress(function(s) { $('.resend-auth-code').text(s + '秒后可重新发送验证码'); }); } }); }); }); // 提交前验证表单 $form.find(':submit').click(function(e) { // 上一次ajax提交已结束才可以继续处理 if ($.when(action2ajax[ApplySample]).state() == 'pending') { e.preventDefault(); return; } // 验证表单,无误则提交 var $invalid = $(); $form.find(':input').each(function(i, elem) { var fieldValid = $(this).valid(); $(this).closest('label').find('.error-message').toggle(!fieldValid); if (!fieldValid) { $invalid = $invalid.add(this); e.preventDefault(); } }); $invalid.first().each(function(i, elem) { var field = this; $(this).focus().select(); }); /* $.Deferred(function(deferred) { $form.find(':input').validate().each(function(i, elem) { var fieldValid = !this.validationMessage; $(this).closest('label').find('.error-message').toggle(!fieldValid); if (!fieldValid) { try { $(this).focus().select()[0].scrollIntoViewIfNeeded(); } catch (e) { // noop } } fieldValid || deferred.reject(); }); deferred.resolve(); }).fail(function() { e.preventDefault(); }); */ }); // 申领表单提交 $form.on('submit', function(e) { e.preventDefault(); // 上一次ajax提交已结束才可以继续处理 if ($.when(action2ajax[ApplySample]).state() == 'pending') { return; } // 验证表单,无误则提交 $.Deferred(function(deferred) { // 验证表单,无误则提交 var $invalid = $(); $form.find(':input').each(function(i, elem) { var fieldValid = $(this).valid(); $(this).closest('label').find('.error-message').toggle(!fieldValid); if (!fieldValid) { $invalid = $invalid.add(this); deferred.reject(); } }); $invalid.first().focus().select(); deferred.resolve(); /* $form.find(':input').validate().each(function(i, elem) { var fieldValid = !this.validationMessage; $(this).closest('label').find('.error-message').toggle(!fieldValid); if (!fieldValid) { try { $(this).focus().select()[0].scrollIntoViewIfNeeded(); } catch (e) { // noop } } fieldValid || deferred.reject(); }); deferred.resolve(); */ }).done(function() { // 提交申领表单 $form.find('.submit-btn').text('提交中,请稍候…'); var data = $form.serializeArray(); action2ajax[ApplySample] = $.post(ApplySample, data); var name = $form.find('[name="name"]').val(); // 用于成功后显示名字 // 显示状态 action2ajax[ApplySample].always(function() { $form.find('.submit-btn').text('提交申领信息'); }).done(function(data, textStatus, jqXHR) { switch (data.result) { case -7: alert('右眼度数选择有误'); break; case -6: alert('左眼度数选择有误'); break; case -5: alert('地址填写有误'); break; case -4: alert('姓名填写有误'); break; case -2: alert('手机号码填写有误'); break; case -1: case 0: alert('验证码无效'); break; case 1: // 申领成功 showApplySuccess(); $('.apply-success-popup').find('.name').text(name); $form.find(':input').val(''); //清空表单 break; case 2: alert('不在活动时间范围内'); break; case 3: alert('此手机号已领取过'); break; case 4: showApplyRunOut(); break; case 5: alert('左眼度数缺货'); break; case 6: alert('右眼度数缺货'); break; case 7: alert('左右眼度数都缺货'); break; default: alert('系统繁忙,请稍候再试。'); break; } }).fail(function(jqXHR, textStatus, errorThrown) { alert('网络错误,请稍候再试。'); }); }); }); })(); // 查找门店 (function() { var $popup = $('.search-store-popup'); function closePopup() { $popup.hide(); } function hideSubPopup() { $popup.find('.popup').hide(); } function showNearby() { $popup.find('.nearby-popup').show().siblings('.popup').hide(); // 加载地图 loadMapScript(); // $.getScript('http://api.map.baidu.com/api?v=2.0&ak=Fu43MGOr8Szn1HzCB5wgnMpc&callback=mapInit'); // 初始化Marker信息列表 var swiper = $('.marker-swiper-container')[0].swiper; if (!swiper) { swiper = new Swiper('.marker-swiper-container', { nextButton: '.marker-swiper-container .swiper-button-next', prevButton: '.marker-swiper-container .swiper-button-prev', slidesPerView: 1, spaceBetween: 30, loop: true, //onTransitionStart: function(swiper) { onSlideChangeStart: function(swiper) { // marker icon改为绿色 try { var slide = swiper.slides[swiper.activeIndex]; // swiper.activeIndex取出的index并不是原始的index,而是算上首位复制品之后的index,通过data().swiperSlideIndex可以获取原始的index. $slide = $(swiper.slides).not('.swiper-slide-duplicate').eq($(slide).data().swiperSlideIndex); var marker = $slide.data().marker; var icon = marker.getIcon(); icon.setImageOffset(new BMap.Size(-19,0)); marker.setIcon(icon); // setViewport (function() { var map = $('#allmap').data().map; try { var viewport = map.getViewport(); viewport.center = marker.getPosition(); map.setViewport(viewport, {enableAnimation: true}); } catch (e) { } })(); } catch (e) { console.log(e); } // previousMarker icon改为原色 try { var previousSlide = swiper.slides[swiper.previousIndex]; $previousSlide = $(swiper.slides).not('.swiper-slide-duplicate').eq($(previousSlide).data().swiperSlideIndex); var previousMarker = $previousSlide.data().marker; var icon = previousMarker.getIcon(); icon.setImageOffset(new BMap.Size(0,0)); previousMarker.setIcon(icon); } catch (e) { console.log(e); } } }); } } function loadMapScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://api.map.baidu.com/api?v=2.0&ak=Fu43MGOr8Szn1HzCB5wgnMpc&callback=mapInit"; document.body.appendChild(script); } window.mapInit = function() { $('.map-loading').show(); var map = new BMap.Map("allmap"); $('#allmap').data().map = map; $('#allmap').css({opacity: 0}); $('.allmap-container').siblings().css({opacity: 0}); map.addEventListener("tilesloaded",function(){ $('.map-loading').hide(); $('#allmap').css({opacity: 1}); $('.allmap-container').siblings().css({opacity: 1}); $('html,body').each(function(i, elem) { var sh = this.scrollHeight; var ch = this.clientHeight; var scrollTop = sh - ch; $(this).animate({scrollTop: scrollTop}); }); }); // 当前城市的门店数组。 var currentCityStores = []; // 根据IP获得当前城市 var localCity = new BMap.LocalCity(); localCity.get(function (result){ var cityName = result.name; // 根据当前城市过滤门店列表, jQuery.each(window.storedata.biotrue, function(i, item) { if (cityName.search(item[0]) >= 0) { currentCityStores.push(item); } }); // 如果当前城市不存在任何门店,则取全部门店。 if (!currentCityStores.length) { currentCityStores = window.storedata.biotrue.concat(); } var myGeo = new BMap.Geocoder(); var geolocation = new BMap.Geolocation(); var viewportPoints = []; geolocation.getCurrentPosition(function(r){ if(this.getStatus() == BMAP_STATUS_SUCCESS){ viewportPoints.push(r.point); var storePromise = $.Deferred(function(deferred) { var count = 0; jQuery.each(currentCityStores, function(i, item) { myGeo.getPoint(item[2], function(point) { if (point) { item.point = point; item.distance = map.getDistance(point, r.point); } else { item.distance = Infinity; //confirm(point); //console.warn(point); } count++; if (count >= currentCityStores.length) { deferred.resolve(); } }); }); }).done(function() { currentCityStores.sort(function(s1, s2) { return(s1.distance>s2.distance)-(s1.distance<s2.distance); }); // 取出距离最近的前5名: (function() { var swiper = $('.marker-swiper-container')[0].swiper; swiper.removeAllSlides(); currentCityStores.slice(0, 5).forEach(function(data, i) { viewportPoints.push(r.point); // marker //var marker = new BMap.Marker(data.point, {icon: new BMap.Icon('/images/marker-green.png', new BMap.Size(15,23), {anchor: new BMap.Size(7.5,23)})}); var marker = new BMap.Marker(data.point, {icon: new BMap.Icon('/images/marker_sprite.png', new BMap.Size(19,25), {anchor: new BMap.Size(9.5,25)})}); marker.addEventListener("click",function() { swiper.slideTo(this.$slide.index()); // marker icon改为绿色 //var icon = this.getIcon(); //icon.setImageOffset(new BMap.Size(-19,0)); //this.setIcon(icon); }); map.addOverlay(marker); var label = new BMap.Label((i+1)); label.setStyle({padding: 0, width: '19px', height: '19px', lineHeight: '19px', border: 'none', color: '#fff', background: 'none', textAlign: 'center'}); marker.setLabel(label); var $slide = $('<li class="swiper-slide">'); $('<p class="title"></p>').text((i+1)+'. '+data[1]+' '+(data.distance/1000).toFixed(1)+'km').appendTo($slide); $('<p class="address"></p>').text(data[2]).appendTo($slide); $('<p class="phoneNumber"></p>').text(data[3]).appendTo($slide); swiper.appendSlide($slide); $slide.data().marker = marker; marker.$slide = $slide; }); swiper.slideTo($(swiper.slides).not('.swiper-slide-duplicate').eq(0).index()); })(); var viewport = map.getViewport(viewportPoints); // map.setViewport(viewport); // TODO setViewport() 无法获取理想效果。 }); map.centerAndZoom(cityName, 12); try { map.centerAndZoom(r.point,12); } catch (e) { } var marker = new BMap.Marker(r.point, {icon: new BMap.Icon('/images/marker_sprite.png', new BMap.Size(19,25), {anchor: new BMap.Size(9.5,25)})}); map.addOverlay(marker); map.panTo(r.point); myGeo.getLocation(r.point, function(rs) { marker.addEventListener('click', function() { var addComp = rs.addressComponents; var add = (addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber); alert('您的位置:'+add); // +'('+r.point.lng+','+r.point.lat+')'); }); }); // 根据名称检索并获取API提供的信息,已废弃 (function() { return; var options = { pageCapacity: 2, onSearchComplete: function(results){ // 判断状态是否正确 if (local.getStatus() == BMAP_STATUS_SUCCESS){ //alert(results.getCurrentNumPois()); var swiper = $('.marker-swiper-container')[0].swiper; swiper.removeAllSlides(); for (var i = 0; i < results.getCurrentNumPois(); i ++){ // 添加搜索地点的Marker var marker = new BMap.Marker(results.getPoi(i).point, {icon: new BMap.Icon('/images/marker-green.png', new BMap.Size(15,23), {anchor: new BMap.Size(7.5,23)})}); map.addOverlay(marker); map.panTo(r.point); marker.poi = results.getPoi(i); marker.addEventListener("click",function() { console.log(this); var info = []; info.push(this.poi.title); info.push(this.poi.address); alert(info.join('\n')); }); var $slide = $('<li class="swiper-slide">'); $('<p class="title"></p>').text(marker.poi.title).appendTo($slide); $('<p class="address"></p>').text(marker.poi.address).appendTo($slide); $('<p class="phoneNumber"></p>').text(marker.poi.phoneNumber).appendTo($slide); swiper.appendSlide($slide); } } } }; var local = new BMap.LocalSearch(map, options); local.search("博士伦"); })(); } else { console.log('failed'+this.getStatus()); } },{enableHighAccuracy: true}) }); }; function showRegional() { $popup.find('.regional-popup').show().siblings('.popup').hide(); $popup.find('.regional-popup').find('.store-list').hide(); } function showDealer() { $popup.find('.dealer-popup').show().siblings('.popup').hide(); $popup.find('.dealer-popup').find('.store-list').hide(); } window.showSearchStorePopup = function() { $popup.show(); $popup.find('.panel').addClass('panel-default'); $popup.find('.popup').hide(); }; // nav点击 $popup.find('nav a').click(function(e) { e.preventDefault(); $popup.find('.panel').removeClass('panel-default'); $(this).addClass('hl').siblings().removeClass('hl'); }); $popup.find('nav a.nearby').click(function(e) { showNearby(); }); $popup.find('nav a.regional').click(function(e) { showRegional(); }); $popup.find('nav a.dealer').click(function(e) { showDealer(); }); // 关闭popup $popup.find('.close-btn').click(function(e) { closePopup(); }); var $form = $popup.find('.regional-popup form'); // 修改表单项时,更新错误消息。 $form.find(':input').on('blur change', function(e, doNotValidate) { if (!doNotValidate) { $(this).closest('label').find('.error-message').toggle(!$(this).valid()); } }); // 切换select选择项时,更新模拟文本内容 $form.find('select').change(function(e) { var $text = $(this).closest('.select').find('.select-text'); var text = $(this).find('option:selected').text() || ''; $text.text(text); }); // 选择城市 $form.find('select.city').change(function(e) { var $option = $(this).find('option:selected'); var regions = $option.data('regions') || ''; var regionArray = regions.match(/[^,]+/g) || []; //var emptyOption = new Option(); //emptyOption.selected = true; //$(emptyOption).text('请选择').val(''); $('select.region optgroup').empty(); jQuery.each(regionArray, function(i, item) { var option = new Option; $(option).text(item).val(item); $('select.region optgroup').append(option); }); $('select.region').val('').trigger('change',[true]); }).val(''); // 表单提交 $form.find(':submit').click(function(e) { $.Deferred(function(deferred) { $form.find('.select').each(function(i, elem) { var $message = $(this).find('.error-message'); var $select = $(this).find('select'); $message.toggle(!$select.val()); $select.val() || deferred.reject(); }); }).fail(function() { e.preventDefault(); }); }); $form.on('submit', function(e) { e.preventDefault(); $form.find('.select').each(function(i, elem) { var $message = $(this).find('.error-message'); var $select = $(this).find('select'); $message.toggle(!$select.val()); }); var city = $('select.city').val(); var region = $('select.region').val(); // 仅城市 if (city) { var cityData = $form.find('select.city').data(city); cityData.$list.show().siblings('.store-list').hide(); /* $popup.find('.store-list').show().find('li').each(function(i, elem) { var data = $(this).data(); $(this).toggle(data.city == city); }); // 解决微信中,首次显示时,滚动失效的问题 setTimeout(function() { $popup.find('.regional-popup').find('.store-list').hide(); setTimeout(function() { $popup.find('.regional-popup').find('.store-list').show(); },1); },1); */ } /* 城市+区域 if (city && region) { $popup.find('.store-list').show().find('li').each(function(i, elem) { var data = $(this).data(); $(this).toggle(data.city == city && data.region == region); }); // 解决微信中,首次显示时,滚动失效的问题 setTimeout(function() { $popup.find('.regional-popup').find('.store-list').hide(); setTimeout(function() { $popup.find('.regional-popup').find('.store-list').show(); },1); },1); } */ }); // 合作商 $popup.on('click', '.dealer-buttons a', function(e) { var dealer = $(this).data('dealer'); var $list = $(this).closest('.popup').find('.store-list'); $list.hide().filter(function() { return $(this).data('dealer') == dealer; }).show(); }); })(); } })(); (function(){ var DEFAULT_WIDTH = 640, // 页面的默认宽度 ua = navigator.userAgent.toLowerCase(), // 根据 user agent 的信息获取浏览器信息 deviceWidth = window.screen.width, // 设备的宽度 devicePixelRatio = window.devicePixelRatio || 1, // 物理像素和设备独立像素的比例,默认为1 targetDensitydpi; // Android4.0以下手机不支持viewport的width,需要设置target-densitydpi if (ua.indexOf("android") !== -1 && parseFloat(ua.slice(ua.indexOf("android")+8)) < 4) { targetDensitydpi = DEFAULT_WIDTH / deviceWidth * devicePixelRatio * 160; $('meta[name="viewport"]').attr('content', 'target-densitydpi=' + targetDensitydpi + ', width=device-width, user-scalable=no'); } })(); // for debug jQuery(document).ready(function ($) { return; $('<input type="range" id="" min=-5 max=5 />').appendTo('body').css({ position: 'fixed', bottom: 0, width: '100%', zIndex: 100 }).change(function (e) { var $range = $(this); $('.swiper-slide').each(function (i, elem) { var tl = $(this).data().tl; if (tl) { var v = $range.val(); var s = +v || 1. if (v < 0) { s = -1 / v; } tl.timeScale(s); console.debug('time scale:', s); } }); }); });