2015-04-17 53 views
-2

我想設置我的Ajax快速購物車,以便如果用戶在快速購物車上徘徊(換句話說與它互動),它會延遲我設置的setInterval,以便一旦某件物品已關閉3秒後添加。在Ajax Quick Cart懸停時暫停setInterval,並在沒有時恢復?

我不是那麼棒,所以任何幫助將不勝感激!

這是我的原代碼:

{% comment %} 
Ajaxify your cart with this plugin. 
Documentation: 
    - http://shopify.com/timber#ajax-cart 
{% endcomment %} 
{% if settings.ajax_cart_enable %} 
    {{ 'handlebars.min.js' | asset_url | script_tag }} 
    {% include 'ajax-cart-template' %} 
    {{ 'ajax-cart.js' | asset_url | script_tag }} 
    <script> 
    jQuery(function($) { 
     ajaxCart.init({ 
     formSelector: '#AddToCartForm', 
     cartContainer: '#CartContainer', 
     addToCartSelector: '#AddToCart', 
     cartCountSelector: '#CartCount', 
     cartCostSelector: '#CartCost', 
     moneyFormat: {{ shop.money_format | json }} 
     }); 
    }); 

    jQuery('body').on('ajaxCart.afterCartLoad', function(evt, cart) { 
     // Bind to 'ajaxCart.afterCartLoad' to run any javascript after the cart has loaded in the DOM 

     timber.RightDrawer.open(); 
    }); 

    jQuery('body').on('click','#AddToCart', function(evt, cart) { 

      timber.RightDrawer.open(); 

       var myVar = setInterval(function(){ 
       timber.RightDrawer.close(); 
       clearInterval(myVar); 
       }, 3000); 
    }); 

這是原來的代碼,我努力去適應設法得到它的工作,但仍然沒有運氣,它只是打破我的setInterval的一部分:

jQuery('body').on('click','#AddToCart', function(evt, cart) { 

      timber.RightDrawer.open(); 

       $('#CartContainer').hover(function(ev){ 
        clearInterval(myVar); 
       }, function(ev){ 
        myVar = setInterval(function(){ 
        timber.RightDrawer.close(); 
        clearInterval(myVar); 
        }, 3000); 
       }); 
     }); 
+1

沒有答案:但你要使用的mouseenter和鼠標離開。 – epascarello

+0

在這裏檢查一個很好的解決方案http://stackoverflow.com/questions/10913703/adding-pause-on-hover-to-setinterval – AboutTime

+0

我已經更新了我的問題與我剛剛看過你的例子後嘗試,但可以'噸似乎得到它的工作,而不會打破我的setInterval。有什麼建議麼? – user2498890

回答

0

我不認爲這是一種好的方法,正如其他人所評論的那樣,有一些潛在的問題需要您按照自己的方式進行操作。

但是,要回答這個問題,下面的JavaScript看起來像描述的那樣工作。它看起來像你的主要問題是你沒有設置點擊按鈕後的時間間隔,只有在懸停和取消懸停容器後點擊按鈕後才設置。

下面,我已將延遲清除移至其自己的功能(doDelayedClear())以防止重複代碼,並且當單擊該按鈕時以及當鼠標懸停並取消懸停時,我都會調用doDelayedClear()

我還添加了一些電話console.log(),以便您可以觀看正在發生的事情。

演示http://jsfiddle.net/BenjaminRay/nb9tetLs/

的JavaScript

var myVar = null; 

jQuery('body').on('click', '#AddToCart', function (evt, cart) { 
    timber.RightDrawer.open(); 
    doDelayedClear(); 
    jQuery('#CartContainer').hover(function (ev) { 
     console.log('hovering...'); 
     clearInterval(myVar); 
    }, function (ev) { 
     console.log('not hovering...'); 
     doDelayedClear(); 
    }); 
}); 

function doDelayedClear() { 
    myVar = setInterval(function() { 
     timber.RightDrawer.close(); 
     console.log('Set interval executed!'); 
     clearInterval(myVar); 
    }, 3000); 
} 
+0

嗨,感謝您的回覆,我已經嘗試了您的建議,但發現儘管這適用於將商品添加到購物車,但它會打開另一個購物車按鈕,該按鈕僅在點擊時打開和關閉。現在該按鈕也響應定時器。我很抱歉,因爲我對JS不太好,所以覺得有點難以遵循。 – user2498890

+0

請張貼一些HTML,以便我們知道我們正在處理的是什麼。應該只有一個ID爲AddToCart的按鈕,因此如果此代碼干擾不同的按鈕,則HTML有些問題。 –

+0

我很難展示我的HTML,因爲我正在構建Shopify商店及其所有細分市場,但我使用了Shopify Timber框架 - http://timber-demo.myshopify.com - 因此您可以看到我正在工作.. – user2498890