2016-07-26 196 views
0

我想創建一個jquery插件,它放大後縮放div的背景圖像。 但是,我有一個非常奇怪的故障。它工作正常,順利,但當div被點擊時,CSS3轉換開始凍結。 我做了一個codepen示例。CSS3過渡與JQuery凍結

http://codepen.io/maxjf1/pen/rLKOPb

編輯:我tryed第一個答案,但沒有奏效。我已更改de code以及更好演示的codepen示例。

var smooth = 'all 200ms ease-out'; 
$("[up-background-zoom]").hover(function() { 
    debug = true; 
    $(this).css({ 
    'background-size': 'inherit', 
    'cursor': 'zoom-in', 
    'border': '1px solid rgba(0, 0, 0, 0.15)', 
    'box-sizing': 'border-box', 
    'transition': smooth 
    }); 
}, function() { 
    $(this).css({ 
    'background-size': '', 
    'background-position': '', 
    'cursor': '', 
    'border': '', 
    'box-sizing': '', 
    'transition': '' 
    }); 
}); 
$("[up-background-zoom]").mousemove(function(e) { 
    var parentOffset = $(this).parent().offset(); 
    var parentOffset = $(this).offset(); 
    var relX = e.pageX - parentOffset.left; 
    var relY = e.pageY - parentOffset.top; 
    var divw = $(this).innerWidth(); 
    var divh = $(this).innerHeight(); 
    var posX = ((100/divw) * relX).toFixed(3); 
    var posY = ((100/divh) * relY).toFixed(3); 
    if (debug) $(this).html('<pre>' + posX + '%<br>' + posY + '%</pre>'); 
    $(this).css({ 
    'background-position': posX + '% ' + posY + '%', 
    }); 
}); 

我不知道什麼是錯的,任何幫助apreciated

回答

0

http://codepen.io/anon/pen/pbKgAz

不要叫裏面的鼠標事件鼠標事件,那會誤事。改用單獨的處理程序。

var debug = true, 
    hovered = false, 
    smooth = 'all 0.1s ease-out', 
    el = $("[up-background-zoom]"); 

el.mousemove(function(e) { 
    var $this = $(this), 
    parentOffset = $this.offset(), 
    relX = e.pageX - parentOffset.left, 
    relY = e.pageY - parentOffset.top, 
    divw = $this.innerWidth(), 
    divh = $this.innerHeight(), 
    posX = ((100/divw) * relX).toFixed(1), 
    posY = ((100/divh) * relY).toFixed(1); 

    if (debug) $this.html('<pre>' + posX + '%<br>' + posY + '%</pre>'); 

    $this.css({ 
    'background-position': posX + '% ' + posY + '%', 
    }); 
}) 

el.on('click', function(e) { 
    if (hovered) { 
    console.log(this); 
    e.preventDefault(); 
    } 
}); 

el.hover(function() { 
    $(this).css({ 
    'background-size': 'inherit', 
    'cursor': 'zoom-in', 
    'border': '1px solid rgba(0, 0, 0, 0.15)', 
    'box-sizing': 'border-box', 
    'transition': smooth 
    }); 
    hovered = true; 
}, function() { 
    $(this).css({ 
    'background-size': '', 
    'background-position': '', 
    'cursor': '', 
    'border': '', 
    'box-sizing': '', 
    'transition': '' 
    }); 
    hovered = false; 
}); 
+0

它工作正常,感謝:D –

+0

對不起,我沒有工作,我已經更新了筆更好的示範。 –

+0

它在我的電腦上運行正常。你使用的是什麼瀏覽器?您必須考慮到每個*像素移動*時鼠標移動的火情,因此當您將鼠標移動100個像素(這不是很多)時,它必須實時連續執行所有計算!因此,扼殺鼠標移動事件可能是一個更好的主意(例如,只觸發全部100ms)。 –