Как прокрутить блок влево до нужного места?
Добрый день! Появилась такая задача, которую даже понятия не имею, как возможно решить. Смысл в следующем: при нажатии на блок красного цвета, блок .blk должен прокрутиться влево до левого края экрана. Прошу прощения за тавтологию. И благодарю за помощь!
<style> .wrp { display: block; position: relative; overflow: hidden; visibility: visible; overflow-x: scroll; width: 100%; height: 200px; background: #cccccc; } .blk { display: block; position: relative; width: 1000px; height: 500px; z-index: 2; margin-left: 100%; background: #aabbcc; } .knop { display: block; position: absolute; width: 20px; height: 20px; right: 10px; top: 50%; background: red; cursor: pointer; } </style> <div class="wrp"> <div class="knop"></div> <div class="blk"></div> </div> |
<style> .wrp { display: block; position: relative; overflow: hidden; visibility: visible; overflow-x: scroll; width: 100%; height: 200px; background: #cccccc; } .blk { display: block; position: relative; width: 1000px; height: 500px; z-index: 2; margin-left: 100%; background: #aabbcc; } .animate { margin-left: 0%; transition-property: margin-left; transition-duration: 9s; } .knop { display: block; position: absolute; width: 20px; height: 20px; right: 10px; top: 50%; background: red; cursor: pointer; } </style> <div class="wrp"> <div class="knop"></div> <div class="blk"></div> </div> <script> document.querySelector('.knop').onclick = function() { document.querySelector('.blk').classList.add('animate'); } </script> |
Dilettante_Pro,
Приветствую вас! Таким образом мы просто уменьшаем margin. А мне необходимо, чтобы margin не изменялся. Вот в этом то и состоит вся задача. |
LADYX,
при данном css прокрутить невозможно на экранах >1000px |
анимация прокрутки блока
LADYX,
для меньше 1000px <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style> .wrp { display: block; position: relative; overflow: hidden; visibility: visible; overflow-x: scroll; width: 100%; height: 200px; background: #cccccc; } .blk { display: block; position: relative; width: 1000px; height: 500px; z-index: 2; margin-left: 100%; background: #aabbcc; } .knop { display: block; position: absolute; width: 20px; height: 20px; right: 10px; top: 50%; background: red; cursor: pointer; } </style> </head> <body> <div class="wrp"> <div class="knop"></div> <div class="blk"></div> </div> <script> function timer(b) { return { play: function() { var d = performance.now(); c = !0; b.from = b.from ||b.elem.scrollLeft; requestAnimationFrame(function e(a) { a = (a - d) / b.duration; 1 <= a && (a = 1, b.callback && b.callback()); b.elem.scrollLeft = b.from + (b.to - b.from) * a | 0; 1 > a && requestAnimationFrame(e) }) } } }; var wrp = document.querySelector('.wrp'), but = document.querySelector('.knop'), anim = timer({ from : 0, to : document.documentElement.clientWidth, duration: 2 * 1000, elem : wrp, callback : function() { } }); but.addEventListener('click', anim.play); </script> </body> </html> |
рони,
я вас приветствую! Прошу прощения за глупый вопрос, и тем не менее, почему на экранах более 1 000 px невозможно сделать такую прокрутку? Этот код, который вы написали, я его попробовал. У меня экран 1600х900, и этот код работает, прокручивает. Странно, ничего тогда не понимаю. Будьте добры, объясните мне пожалуйста, мне нужно понять. Благодарю вас! |
Цитата:
|
рони,
ну нет, вы издеваетесь)) Правда, а причем здесь размер экрана? Просто тупо вставить код, и радоваться это глупо, а я хочу понять, почему вы сделали акцент на размер экрана. Почему работает там, где вы сказали работать не должно? :) |
LADYX,
скопируйте код на отдельную страницу и откройте в любом браузере. скрипт чтоб увидеть ограничение ненужен, полосу прокрутки прокрутите максимально вправо мышкой. |
рони,
прошу прощения за навязчивость. Хоть убейте, не могу понять, какое ограничение? Скопировал код на отдельную чистую страницу. Всё отображается правильно, все блоки верных размеров, как в css. Полосу прокрутки прокручиваю до конца вправо - всё четко работает: прокручивается margin и до конца весь блок, как и должно быть. |
Часовой пояс GMT +3, время: 15:47. |