class Watir::Scroll

Public Class Methods

new(object) click to toggle source
# File lib/watir/scroll.rb, line 9
def initialize(object)
  @object = object
end

Public Instance Methods

by(left, top) click to toggle source

Scrolls by offset. @param [Fixnum] left Horizontal offset @param [Fixnum] top Vertical offset

# File lib/watir/scroll.rb, line 17
def by(left, top)
  @object.browser.execute_script('window.scrollBy(arguments[0], arguments[1]);', Integer(left), Integer(top))
  self
end
to(param = :top) click to toggle source

Scrolls to specified location. @param [Symbol] param

# File lib/watir/scroll.rb, line 26
def to(param = :top)
  args = @object.is_a?(Watir::Element) ? element_scroll(param) : browser_scroll(param)
  raise ArgumentError, "Don't know how to scroll #{@object} to: #{param}!" if args.nil?

  @object.browser.execute_script(*args)
  self
end

Private Instance Methods

browser_scroll(param) click to toggle source
# File lib/watir/scroll.rb, line 56
def browser_scroll(param)
  case param
  when :top, :start
    'window.scrollTo(0, 0);'
  when :center
    'window.scrollTo(window.outerWidth / 2, window.outerHeight / 2);'
  when :bottom, :end
    'window.scrollTo(0, document.body.scrollHeight);'
  when Array
    ['window.scrollTo(arguments[0], arguments[1]);', Integer(param[0]), Integer(param[1])]
  end
end
element_scroll(param) click to toggle source
# File lib/watir/scroll.rb, line 36
    def element_scroll(param)
      script = case param
               when :top, :start
                 'arguments[0].scrollIntoView();'
               when :center
                 <<-JS
                   var bodyRect = document.body.getBoundingClientRect();
                   var elementRect = arguments[0].getBoundingClientRect();
                   var left = (elementRect.left - bodyRect.left) - (window.innerWidth / 2);
                   var top = (elementRect.top - bodyRect.top) - (window.innerHeight / 2);
                   window.scrollTo(left, top);
                 JS
               when :bottom, :end
                 'arguments[0].scrollIntoView(false);'
               else
                 return nil
               end
      [script, @object]
    end