2013-09-01 31 views
8

Tôi đã chỉnh sửa this plugin cho jQuery sử dụng hiệu ứng thị sai cho trang web của tôi. Vấn đề là (ngay cả trong bản demo trong liên kết ở trên) Chrome và IE có một cuộn KHÔNG thực sự trơn tru .. nó chỉ hoạt động tốt khi bạn nhấn nút giữa trên chuột và cuộn liên tục (không phải "từng bước một bước "khi bạn di chuyển con lăn chuột). Vì vậy, khi bạn sử dụng bánh xe chuột để cuộn, hiệu ứng thị sai hoàn toàn bị hủy hoại. Trong Firefox thay vì cuộn liên tục ngay cả khi cuộn bằng bánh xe chuột. Có cách nào để có liên tục cuộn trong IE và Chrome quá (javascript?).Chrome và IE: thị sai (jQuery animate) không mượt mà khi sử dụng bánh xe chuột để cuộn

Here 's trang web của tôi (như bạn có thể thấy, nếu bạn ghé thăm nó whit Firefox hiệu quả là hoàn toàn khác nhau).

+0

kiểm tra http://stackoverflow.com/a/14905953/1055987 nếu điều đó giúp – JFK

+0

Điều này đã giúp tôi http://stackoverflow.com/q/14905779. Fiddle trong trường "EDIT" hoạt động hoàn hảo. :) – MultiformeIngegno

+0

@MultiformeIngegno Tôi đang gặp vấn đề tương tự. Bạn có thể vui lòng đăng giải pháp chính xác của mình làm câu trả lời không? Trang web của bạn hiện hoạt động hoàn hảo trên Chrome và IE, tôi muốn hoàn thành tương tự. Cảm ơn. – Cthulhu

Trả lời

13

Tôi đã giải quyết vấn đề với tập lệnh jQuery này (thêm EventListener cho cả cuộn bàn phím và chuột), hy vọng nó sẽ giúp. :)

if (window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false); 
window.onmousewheel = document.onmousewheel = wheel; 

var time = 1300; 
var distance = 270; 

function wheel(event) { 
    if (event.wheelDelta) delta = event.wheelDelta/120; 
    else if (event.detail) delta = -event.detail/3; 

    handle(); 
    if (event.preventDefault) event.preventDefault(); 
    event.returnValue = false; 
} 

function handle() { 

    $('html, body').stop().animate({ 
     scrollTop: $(window).scrollTop() - (distance * delta) 
    }, time); 
} 


$(document).keydown(function (e) { 

    switch (e.which) { 
     //up 
     case 38: 
      $('html, body').stop().animate({ 
       scrollTop: $(window).scrollTop() - distance 
      }, time); 
      break; 

      //down 
     case 40: 
      $('html, body').stop().animate({ 
       scrollTop: $(window).scrollTop() + distance 
      }, time); 
      break; 
    } 
}); 
+0

Điều này thực sự cố định vấn đề tôi đã có trong chrome, nhưng sau đó nó messes lên firefox lol.Tôi phải đặt này trong một 'if (chrome) {}' tuyên bố, nhưng nó vẫn giúp! – Yohn

+0

Cảm ơn bạn, điều này thực sự hữu ích! Tuy nhiên, tôi nhận thấy nó hơi lag khi sử dụng hình ảnh lớn. Nó cũng không cảm thấy mượt mà như bản gốc từ firefox. 'linear' transition:' animate ({...}, time, 'linear') ' –

1

Tôi đã sửa đổi mã một chút cho bàn phím và giật không còn xuất hiện trong IE và Chrome nữa.

http://jsfiddle.net/cZuym/247/

Tôi vừa thêm e.preventDefault();

if (window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false); 
window.onmousewheel = document.onmousewheel = wheel; 

var time = 1000; 
var distance = 300; 

function wheel(event) { 
    if (event.wheelDelta) delta = event.wheelDelta/120; 
    else if (event.detail) delta = -event.detail/3; 

    handle(); 
    if (event.preventDefault) event.preventDefault(); 
    event.returnValue = false; 
} 

function handle() { 

    $('html, body').stop().animate({ 
     scrollTop: $(window).scrollTop() - (distance * delta) 
    }, time); 
} 


$(document).keydown(function (e) { 

    switch (e.which) { 
     //up 
     case 38: 
      e.preventDefault(); 
      $('html, body').stop().animate({ 
       scrollTop: $(window).scrollTop() - distance 
      }, time); 
      break; 

      //down 
     case 40: 
      e.preventDefault(); 
      $('html, body').stop().animate({ 
       scrollTop: $(window).scrollTop() + distance 
      }, time); 
      break; 
    } 
}); 
+0

Thực sự cải thiện rất tốt. Điều đó giải quyết được vấn đề cho bàn phím. –

+1

Bạn đã thử trên trackpad, nó hầu như không chuyển động. – IqbalBary

+0

Nó cũng không hoạt động trên chuột ma thuật táo. –

Các vấn đề liên quan