choirulz / base2

Automatically exported from code.google.com/p/base2
0 stars 0 forks source link

HTMLElement.scrollIntoView #32

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
I'm planning to implement HTMLElement.scrollIntoView repairs (at least older 
versions of Safari 
don't implement it).

One point of discussion: the behaviour of the different implementations are not 
the same. For 
example: IE also scroll's horizontal, when it is called upon an inline element.

Do we repair these kinds of issues too?

Original issue reported on code.google.com by doek...@gmail.com on 21 Jul 2007 at 8:49

GoogleCodeExporter commented 9 years ago
Oh yeah, the url to the standard:
http://www.w3.org/html/wg/html5/#scrollintoview

it doesn't mention horizontal scrolling.

Original comment by doek...@gmail.com on 21 Jul 2007 at 8:50

GoogleCodeExporter commented 9 years ago
If it is only a few lines of code then by all means code it up. If it requires 
a lot
of code then I don't consider it important enough to include in base2.DOM. You 
can
alway write it as an optional Module if that is the case. Maybe DOM/extras is
something we should create either way?

Original comment by dean.edw...@gmail.com on 23 Jul 2007 at 9:04

GoogleCodeExporter commented 9 years ago
DOM/extras it is. We can always merge it with DOM later.

Original comment by doek...@gmail.com on 23 Jul 2007 at 9:21

GoogleCodeExporter commented 9 years ago
Hey. If scrollIntoView fix is only a couple of lines it can still go in 
base2.DOM
core. But It would be nice to have some /extras/ for other stuff.

Or we can namespace it (with lazy loading in mind).

e.g. base2.use(DOM.Element.scrollIntoView);

Which would mean that the code lived here:

/svn/version/whatever/DOM/HTMLElement/scrollIntoView.js

Thoughts?

Original comment by dean.edw...@gmail.com on 23 Jul 2007 at 9:54

GoogleCodeExporter commented 9 years ago
I will come up with my javascript builder idea shortly. Then we talk.

The code for scrollIntoView at the moment is:
---8<----------------------------------------------------------------------
function GetWindowHeight() {
  return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body.clientHeight||0;
}
function GetScrollTop() {
  return window.pageYOffset||document.documentElement&&document.documentElement.scrollTop || document.body.scrollTop||0;
}
function GetTop(element) {
  var pos=0;
  do pos+=element.offsetTop
  while(element=element.offsetParent);
  return pos;
}
function InView(element,margin) {
  if(typeof element=='string') element=$(element);
  if(!margin) margin=0;
  var Top=GetTop(element), ScrollTop=GetScrollTop();
  return !(Top<ScrollTop+margin || Top>ScrollTop+GetWindowHeight()-element.offsetHeight-margin);
}
function ScrollIntoView(element,bAlignTop,margin) {
  if(typeof element=='string') element=$(element);
  if(!margin) margin=0;
  var posY=GetTop(element);
  if(bAlignTop) posY-=margin;
  else posY+=element.offsetHeight+margin-GetWindowHeight();
  window.scrollTo(0, posY);
}
---8<----------------------------------------------------------------------
to long?

Original comment by doek...@gmail.com on 23 Jul 2007 at 10:06

GoogleCodeExporter commented 9 years ago
Too long.

Original comment by dean.edw...@gmail.com on 23 Jul 2007 at 1:06

GoogleCodeExporter commented 9 years ago
That too ;-)

Original comment by doek...@gmail.com on 23 Jul 2007 at 3:42

GoogleCodeExporter commented 9 years ago
We could create DOM/HTML5, and also move getElementsByClassName to there, and 
implement:
irrelevant, draggable there. But I for starters, I implement the DOM/strict way.

Original comment by doek...@gmail.com on 23 Jul 2007 at 10:02