Javascript 仅适用于 IE Quirks、7 以及 Chrome 和 Firefox。不适用于 IE 8 或 9 标准

发布于 2024-12-02 05:59:14 字数 4478 浏览 3 评论 0原文

我的代码使许多部分看起来围绕平面上看不见的水平轴运行。它是如何工作的:它在MouseDown上触发一个鼠标事件监听器,并捕获用户光标相对于窗口的X。 onMouseUp 是通过 90 毫秒后调用的 setTimeout 函数来模拟的,它执行相同的操作,然后将两个值相减以确定旋转的距离和方向。

我的问题是:为什么它在 FF、Chrome、IE Quirks 和 IE 7 标准中可以正常工作,但在 IE 8 标准或 IE 9 标准中不能正常工作?

IE8:模型崩溃并且分区漂浮到包含边界分区之外。 IE9:JS 没有任何响应。

以下包含页面上的整个 javascript,可以在 @ http://electrifiedpulse.com/360.html< /a> :

<script type=text/javascript>
var objectCount = 8; var pixel = new Array(); var size = new Array();
var command = "Stop"; var panel = new Array('0','Back','Front','Front','Back','Front','Back','Front','Back'); 
var quadrant = new Array(); var originalSize = 50;
var WindowWidth = 360; var WindowWidthHalf = WindowWidth/2; var sTime=0; var s1=0; var scrollSpeed;

var myX, myY;
function myMove(evt) {
  if (window.event){myX = event.clientX;myY = event.clientY;}
  else{myX = evt.clientX;myY = evt.clientY;}
}

document.onmousemove = myMove;
if (!window.event) {document.captureEvents(Event.MOUSEMOVE);}

function iScrollStop(){
sTime = sTime - 10; 
document.getElementById('I_CONTROLS').innerHTML = sTime + ", " + scrollSpeed;
if(sTime<=0) command = "Stop";
else setTimeout(function(){iScrollStop()},10);
}

function iScrollPause(){
setTimeout(function(){this.checkPause()},100);
this.checkPause = function(){if(s1>sTime){command="Stop"; sTime=0; s1=0;}}
}

var iInitialX; //var d='Up';
function iScrollListen(d){

if(d=='Down'){ iInitialX = myX; setTimeout(function(){iScrollListen('Up')},90); iScrollPause(); 
}else if(d=='Up'){
var spinDirection = 'Right';
var iDifference = myX - iInitialX; if(iDifference < 0){ spinDirection = 'Left'; iDifference = Math.abs(iDifference);}
if (command!=spinDirection){sTime=0;s1=0;} var doScroll=0; if(command=='Stop') doScroll=1;
command = spinDirection; s1=sTime; sTime+=(iDifference*15); if(s1<=0)iScrollStop(); 
if(doScroll==1) iScroll(); 

}
}

function iScrollControl(c){command = c; if((c=='Left')||(c=='Right')) iScroll();}

function iScroll(){
scrollSpeed=(sTime<=1)? 1 : Math.ceil(sTime/1000);
if(scrollSpeed>=10)scrollSpeed=10;
scrollSpeed = 15 - scrollSpeed;

if(command=='Left') pixelDirection=2;
else if(command=='Right') pixelDirection=(0-2);
pixelDirectionNeg = (0-pixelDirection);

for(i=1;i<=objectCount;i++){
iObj = document.getElementById("iObject" + i);
pixel[i] = iObj.offsetLeft;

if((pixel[i]>=WindowWidthHalf)&&(pixel[i]<=WindowWidth)){
if(panel[i]=="Front") quadrant[i] = 4;
else quadrant[i] = 3;
}
if((pixel[i]>=0)&&(pixel[i]<=WindowWidthHalf)){
if(panel[i]=="Front") quadrant[i] = 1;
else quadrant[i] = 2;
}




if(quadrant[i]==1){
iObj.style.left = pixel[i]-pixelDirection;
size[i] = (pixel[i]-pixelDirection)*(1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirection<=0){quadrant[i]=2; panel[i]='Back';}
if(pixel[i]-pixelDirection>=WindowWidthHalf){quadrant[i]=4; panel[i]='Front';}
}

if(quadrant[i]==2){
iObj.style.left = pixel[i]-pixelDirectionNeg;
size[i] = (pixel[i]-pixelDirectionNeg)*(-1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirectionNeg<=0){quadrant[i]=1; panel[i]='Front';}
if(pixel[i]-pixelDirectionNeg>=WindowWidthHalf){quadrant[i]=3; panel[i]='Back';}
}

if(quadrant[i]==3){
iObj.style.left = pixel[i]-pixelDirectionNeg;
size[i] = (WindowWidth-(pixel[i]-pixelDirectionNeg))*(-1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirectionNeg<=WindowWidthHalf){quadrant[i]=2; panel[i]='Back';}
if(pixel[i]-pixelDirectionNeg>=WindowWidth){quadrant[i]=4; panel[i]='Front';}
}

if(quadrant[i]==4){
iObj.style.left = pixel[i]-pixelDirection;
size[i] = (WindowWidth-(pixel[i]-pixelDirection))*(1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirection<=WindowWidthHalf){quadrant[i]=1; panel[i]='Front';}
if(pixel[i]-pixelDirection>=WindowWidth){quadrant[i]=3; panel[i]='Back';}
}

}


if((command=='Left')||(command=='Right')) setTimeout(function(){iScroll()},scrollSpeed);

}

function Attribute(iObj,s){
iObj.style.width = s; iObj.style.height = s; iObj.style.top='50%'; iObj.style.marginTop = (0-(s/2))+"px"; iObj.style.zIndex = s;
}

</script>

我不知道什么可能与您相关,也可能不相关,所以我包含了整个脚本。如果你愿意,你可以忽略最长的函数,

iScroll()

My code makes a number of divisions appear to orbit around an invisible horizontal axis on a plane. How it works: it fires a mouseevent listener onMouseDown, and captures the X of the user's cursor relative to the window. onMouseUp is simulated by a setTimeout function that is called 90 milliseconds later, it does the same and then subtracts the two values to determine the distance and direction to spin.

My question is: Why does it work correctly in FF, Chrome, and IE Quirks and IE 7 Standards, but not IE 8 Standards or IE 9 Standards?

IE8: the model breaks down and the divisons float away outside the containing boundary division. IE9: No response from the JS whatsoever.

The following contains the entire javascript on the page, which can be found @ http://electrifiedpulse.com/360.html :

<script type=text/javascript>
var objectCount = 8; var pixel = new Array(); var size = new Array();
var command = "Stop"; var panel = new Array('0','Back','Front','Front','Back','Front','Back','Front','Back'); 
var quadrant = new Array(); var originalSize = 50;
var WindowWidth = 360; var WindowWidthHalf = WindowWidth/2; var sTime=0; var s1=0; var scrollSpeed;

var myX, myY;
function myMove(evt) {
  if (window.event){myX = event.clientX;myY = event.clientY;}
  else{myX = evt.clientX;myY = evt.clientY;}
}

document.onmousemove = myMove;
if (!window.event) {document.captureEvents(Event.MOUSEMOVE);}

function iScrollStop(){
sTime = sTime - 10; 
document.getElementById('I_CONTROLS').innerHTML = sTime + ", " + scrollSpeed;
if(sTime<=0) command = "Stop";
else setTimeout(function(){iScrollStop()},10);
}

function iScrollPause(){
setTimeout(function(){this.checkPause()},100);
this.checkPause = function(){if(s1>sTime){command="Stop"; sTime=0; s1=0;}}
}

var iInitialX; //var d='Up';
function iScrollListen(d){

if(d=='Down'){ iInitialX = myX; setTimeout(function(){iScrollListen('Up')},90); iScrollPause(); 
}else if(d=='Up'){
var spinDirection = 'Right';
var iDifference = myX - iInitialX; if(iDifference < 0){ spinDirection = 'Left'; iDifference = Math.abs(iDifference);}
if (command!=spinDirection){sTime=0;s1=0;} var doScroll=0; if(command=='Stop') doScroll=1;
command = spinDirection; s1=sTime; sTime+=(iDifference*15); if(s1<=0)iScrollStop(); 
if(doScroll==1) iScroll(); 

}
}

function iScrollControl(c){command = c; if((c=='Left')||(c=='Right')) iScroll();}

function iScroll(){
scrollSpeed=(sTime<=1)? 1 : Math.ceil(sTime/1000);
if(scrollSpeed>=10)scrollSpeed=10;
scrollSpeed = 15 - scrollSpeed;

if(command=='Left') pixelDirection=2;
else if(command=='Right') pixelDirection=(0-2);
pixelDirectionNeg = (0-pixelDirection);

for(i=1;i<=objectCount;i++){
iObj = document.getElementById("iObject" + i);
pixel[i] = iObj.offsetLeft;

if((pixel[i]>=WindowWidthHalf)&&(pixel[i]<=WindowWidth)){
if(panel[i]=="Front") quadrant[i] = 4;
else quadrant[i] = 3;
}
if((pixel[i]>=0)&&(pixel[i]<=WindowWidthHalf)){
if(panel[i]=="Front") quadrant[i] = 1;
else quadrant[i] = 2;
}




if(quadrant[i]==1){
iObj.style.left = pixel[i]-pixelDirection;
size[i] = (pixel[i]-pixelDirection)*(1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirection<=0){quadrant[i]=2; panel[i]='Back';}
if(pixel[i]-pixelDirection>=WindowWidthHalf){quadrant[i]=4; panel[i]='Front';}
}

if(quadrant[i]==2){
iObj.style.left = pixel[i]-pixelDirectionNeg;
size[i] = (pixel[i]-pixelDirectionNeg)*(-1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirectionNeg<=0){quadrant[i]=1; panel[i]='Front';}
if(pixel[i]-pixelDirectionNeg>=WindowWidthHalf){quadrant[i]=3; panel[i]='Back';}
}

if(quadrant[i]==3){
iObj.style.left = pixel[i]-pixelDirectionNeg;
size[i] = (WindowWidth-(pixel[i]-pixelDirectionNeg))*(-1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirectionNeg<=WindowWidthHalf){quadrant[i]=2; panel[i]='Back';}
if(pixel[i]-pixelDirectionNeg>=WindowWidth){quadrant[i]=4; panel[i]='Front';}
}

if(quadrant[i]==4){
iObj.style.left = pixel[i]-pixelDirection;
size[i] = (WindowWidth-(pixel[i]-pixelDirection))*(1/(WindowWidthHalf/(originalSize/2))) + (originalSize/2);
Attribute(iObj,size[i]);
if(pixel[i]-pixelDirection<=WindowWidthHalf){quadrant[i]=1; panel[i]='Front';}
if(pixel[i]-pixelDirection>=WindowWidth){quadrant[i]=3; panel[i]='Back';}
}

}


if((command=='Left')||(command=='Right')) setTimeout(function(){iScroll()},scrollSpeed);

}

function Attribute(iObj,s){
iObj.style.width = s; iObj.style.height = s; iObj.style.top='50%'; iObj.style.marginTop = (0-(s/2))+"px"; iObj.style.zIndex = s;
}

</script>

I don't know what may or may not be relevant to you, so I included the entire script. If you want you could ignore the longest function,

iScroll()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨曦慕雪 2024-12-09 05:59:15

@瑞安斯托茨。尝试以这种方式注册事件:

var isMouseCaptured=false;
function i_boundary_mousedown(ev) {
    isMouseCaptured=true;
    iScrollListen("Down");
}
function doc_mousemove(ev) {
    if(isMouseCaptured) {
        ev=ev||event;
        myX=ev.clientX;
        myY=ev.clientY;
    }
}
function doc_mouseup(ev) {
    if(isMouseCaptured) {
        isMouseCaptured=false;
        ev=ev||event;
        myX=ev.clientX;
        myY=ev.clientY;
    }
}

var i_boundaryObj=document.getElementById('I_BOUNDARY');
if(window.addEventListener) {
    i_boundaryObj.addEventListener('mousedown',i_boundary_mousedown,false);
    document.addEventListener('mousemove',doc_mousemove,false);
    document.addEventListener('mouseup',doc_mouseup,false)
}
else if(window.attachEvent) {
    i_boundaryObj.attachEvent('onmousedown',i_boundary_mousedown)
    document.attachEvent('onmousemove',doc_mousemove);
    document.attachEvent('onmouseup',doc_mouseup)
}
else ;//

为具有类“I_BOUNDARY”id属性“I_BOUNDARY”的DIV添加并删除onmousedown属性。

@RyanStortz. Try to register events in this maner:

var isMouseCaptured=false;
function i_boundary_mousedown(ev) {
    isMouseCaptured=true;
    iScrollListen("Down");
}
function doc_mousemove(ev) {
    if(isMouseCaptured) {
        ev=ev||event;
        myX=ev.clientX;
        myY=ev.clientY;
    }
}
function doc_mouseup(ev) {
    if(isMouseCaptured) {
        isMouseCaptured=false;
        ev=ev||event;
        myX=ev.clientX;
        myY=ev.clientY;
    }
}

var i_boundaryObj=document.getElementById('I_BOUNDARY');
if(window.addEventListener) {
    i_boundaryObj.addEventListener('mousedown',i_boundary_mousedown,false);
    document.addEventListener('mousemove',doc_mousemove,false);
    document.addEventListener('mouseup',doc_mouseup,false)
}
else if(window.attachEvent) {
    i_boundaryObj.attachEvent('onmousedown',i_boundary_mousedown)
    document.attachEvent('onmousemove',doc_mousemove);
    document.attachEvent('onmouseup',doc_mouseup)
}
else ;//

Add for DIV with class "I_BOUNDARY" id attribute "I_BOUNDARY" and remove onmousedown attribute.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文