2013-08-06 22 views
9

Về cơ bản tôi có một trang web có nội dung cuộn theo chiều ngang. Như trong toàn bộ trang cuộn theo chiều ngang, không chỉ là một div.Sử dụng các nút mũi tên để cuộn cửa sổ theo chiều ngang

Tôi đang cố gắng triển khai các nút mũi tên trái và phải khi được di chuyển hoặc di chuột (nó không quan trọng quá mức nào), cuộn toàn bộ cửa sổ (suốt) sang trái và sang phải.

Trang web này hiện khá nhiều những gì tôi muốn với ít trung mũi tên: http://www.clholloway.co.za

bất cứ ai có thể giúp với điều này? Chúc mừng.

Trả lời

14

Tôi nghĩ với một chút jQuery bạn có thể đạt được những gì bạn đang tìm kiếm. Ý tưởng cơ bản là xử lý một số sự kiện (onmouseenter, mousedown, vv ...) mà bạn có thể sử dụng để bắt đầu cuộn.

Tưởng tượng bạn có một số đánh dấu trông như thế này:

<div id="parent"> 
    <div class="contentBlock">1</div> 
    <div class="contentBlock">2</div> 
    <div class="contentBlock">3</div> 
    <div class="contentBlock">4</div> 
    <div class="contentBlock">5</div> 
</div> 
<span id="panLeft" class="panner" data-scroll-modifier='-1'>Left</span> 

<span id="panRight" class="panner" data-scroll-modifier='1'>Right</span> 

Và một vài phong cách để đảm bảo nó sẽ gây ra cửa sổ để di chuyển:

#parent { 
    width:6000px; 
} 
.contentBlock { 
    font-size:10em; 
    text-align:center; 
    line-height:400px; 
    height:400px; 
    width:500px; 
    margin:10px; 
    border:1px solid black; 
    float:left; 
} 
.panner { 
    border:1px solid black; 
    display:block; 
    position:fixed; 
    width:50px; 
    height:50px; 
    top:45%; 
} 
.active{ 
    color:red; 
} 
#panLeft { 
    left:0px; 
} 
#panRight { 
    right:0px; 
} 

Bạn có thể sử dụng một sự kết hợp của phong cách, setInterval và jQuery.scrollLeft() để đạt được hiệu quả bạn muốn.

(function() { 

    var scrollHandle = 0, 
     scrollStep = 5, 
     parent = $(window); 

    //Start the scrolling process 
    $(".panner").on("mouseenter", function() { 
     var data = $(this).data('scrollModifier'), 
      direction = parseInt(data, 10);   

     $(this).addClass('active'); 

     startScrolling(direction, scrollStep); 
    }); 

    //Kill the scrolling 
    $(".panner").on("mouseleave", function() { 
     stopScrolling(); 
     $(this).removeClass('active'); 
    }); 

    //Actual handling of the scrolling 
    function startScrolling(modifier, step) { 
     if (scrollHandle === 0) { 
      scrollHandle = setInterval(function() { 
       var newOffset = parent.scrollLeft() + (scrollStep * modifier); 

       parent.scrollLeft(newOffset); 
      }, 10); 
     } 
    } 

    function stopScrolling() { 
     clearInterval(scrollHandle); 
     scrollHandle = 0; 
    } 

}()); 

Full jsFiddle chứng minh phương pháp này: http://jsfiddle.net/jwcarroll/atAHh/

+0

Cảm ơn điều này là hoàn toàn hoàn hảo! Bạn đã giải quyết một cơn đau đầu lớn! Và với một thay đổi rất nhỏ, bạn có thể chuyển đổi nó để di chuyển onmousedown (nếu có ai quan tâm, tôi đã thay đổi fiddle ở đây để làm việc onmousedown không di chuột: http://jsfiddle.net/atAHh/2/). – user2634764

+0

@ user2634764 - Không sao cả. Rất vui được giúp :) – Josh

0

Nếu bạn đặt phần tử body thành chiều rộng lớn hơn cổng xem (và không đặt ẩn tràn) trình duyệt sẽ tự động cuộn phím mũi tên ngang. Nó giống như sử dụng mũi tên dọc cuộn trên trang web này.

+0

Tôi biết - nhưng việc di chuyển phím mũi tên trái/phải tự động quá chậm và không đủ mượt mà theo ý kiến ​​của tôi. Vì vậy, lý tưởng tôi nghĩ cách dễ nhất để làm tròn điều này là đặt các nút cuộn cửa sổ trình duyệt sang trái hoặc sang phải. Tôi cũng sẽ rất vui nếu tôi có thể lấy các phím mũi tên để cuộn trơn tru khi bạn bấm chúng và sau đó dừng lại khi bạn thả - nhưng tôi đang vật lộn, bởi vì JS không phải là ngôn ngữ mạnh nhất của tôi! – user2634764

+1

Không gì có thể nhanh hơn hoặc mượt mà hơn so với cuộn gốc. Nếu bạn nắm bắt các sự kiện trong JS, bạn liên tục thực thi thời gian chạy JS, sau đó cho trình duyệt xem cuộn, thêm một lớp và làm chậm nó xuống. Điều duy nhất bạn có thể làm là nắm bắt keydown trong JS và sau đó di chuyển xa hơn nhiều so với bình thường, nhưng điều đó sẽ gây trở ngại cho người dùng. –

1

Tôi đã tạo ra này Fiddle để bạn có thể giúp đỡ. Hãy xem và xem liệu nó có giúp đưa bạn đi đúng hướng hay không. Bạn có thể sẽ phải thích nghi nó với tình huống của bạn, nhưng hy vọng nó làm những gì bạn cần.

Xin lưu ý rằng tôi đặt overflow:hidden trên <body> để thanh cuộn rõ ràng không hiển thị; thay đổi nếu muốn.

Chúc mừng!

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