在现有网站上自动滚动

时间:2018-07-12 15:47:59

标签: javascript html

因此,我有一些代码可使网页自动水平滚动,这在创建网页时有效,但是当我尝试打开现有网页然后运行脚本时,什么也没发生,有人可以解释一下我需要确实,我只想能够打开脚本,然后再打开网页并开始来回滚动,如果有帮助,它可以在canban板上显示不同的工作项。

这是我到目前为止所拥有的:

<script>
window.open("https://www.bbc.co.uk/news");


var scrollWanted = true;
var scrollbarPosition = 0;
var pageWidth = getWidth();

function scrollWin() 
{
	var scrollDirection = 'Right';
	var pageWidth = getWidth();
	scrollWanted = true;
	

	function f() 
	{
		if(scrollWanted)
		{
			if(scrollbarPosition == 0)
			{
				scrollDirection = 'Right'
			}
			
			if(scrollbarPosition == 100)
			{

				scrollDirection = 'Left';
			}
			
			if(scrollDirection == 'Right')
			{
				window.scrollTo(window.scrollX + 1, 0);				
				scrollbarPosition++;					
			}
			
			if(scrollDirection == 'Left')
			{
				window.scrollTo(window.scrollX - 1, 0);				
				scrollbarPosition--;					
			}
						
			setTimeout( f, 30 );
			
			
			//Refresh
			//if( scrollX == 50 )
			//{
			//	window.scrollTo(0,0);
			//	location.reload();
			//	
			//	setTimeout( f, 3000 );
			//	scrollWin();
			//}
		}
	}
	f();
	

  
}

function getWidth() {
  return Math.max(
    document.body.scrollWidth,
    document.documentElement.scrollWidth,
    document.body.offsetWidth,
    document.documentElement.offsetWidth,
    document.documentElement.clientWidth
  );
}
</script>

我知道英国广播公司(BBC)的网站并没有水平延伸,但是我想不出任何有atm的网站。

谢谢! 凯尔。

1 个答案:

答案 0 :(得分:1)

据我所知,您想通过JavaScript打开某个网站example.com,其内容可以水平滚动。

解决方案:

您需要将新打开的窗口分配给变量,以便可以在打开后对其进行操作。

var newWindow = window.open('http://example.com');

要进行操作,请像下面这样使用此newWindow变量作为window对象:

newWindow.scrollTo(newWindow.scrollX + 1, 0);

此外,您的getWidth()函数需要像这样更改:

function getWidth(win) {
  return Math.max(
    win.document.body.scrollWidth,
    win.document.documentElement.scrollWidth,
    win.document.body.offsetWidth,
    win.document.documentElement.offsetWidth,
    win.document.documentElement.clientWidth
  );
}

您可以猜测,scrollWin()函数需要以相同的方式进行更改。

注释1

如果您打开的域与运行javascript的域不同,则window返回的window.open()对象将不可访问

也就是说,如果您的JavaScript加载在yoursite.com之类的网站上,并且您打开了var newWindow = window.open('http://example.com')之类的另一个域,则无法访问newWindow.document对象,或该window对象的任何属性,即您的getWidth()函数将失败,scrollWin()也将失败。

例如,请在此页面上的控制台中尝试以下代码:

var newWindow = window.open('http://google.com');
alert(newWindow.body.scrollWidth);

将引发以下错误:

Uncaught DOMException: Blocked a frame with origin "https://stackoverflow.com" from accessing a cross-origin frame.

注释2

如果您在与站点相同的域中使用它,则需要考虑以下因素:

var newWindow = window.open('http://yoursite.com')之后,如果您像newWindow.document.documentElement.offsetWidth那样立即访问它,则可能会得到不需要的结果,因为新窗口的内容可能仍在加载< / strong>。

因此,if(newWindow.document.readyState === 'complete')检查可能对以后运行滚动代码很有帮助。

我已经尽力澄清了,随时要求澄清。