不确定如何将古老的图像切换器代码从使用 name="foo" 调整为 id="foo"
Not sure how to adapt ancient image switcher code from using name="foo" to id="foo"
大约 19 年前,我需要一个使用 onmouseover
事件更改图像的脚本。该脚本使用了 name="foo"
,当然,<img>
标签不再支持它。我真的忘记了脚本是如何工作的,我需要一些帮助来调整它以使用 id="foo"
.
这是我 <head>
中的脚本:
<script>
function newImage(arg) {
if (document.images) {
rslt = new Image();
rslt.src = arg;
return rslt;
}
}
function changeImages() {
if (document.images && (preloadFlag == true)) {
for (var i=0; i<changeImages.arguments.length; i+=2) {
document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
}
}
}
var preloadFlag = false;
function preloadImages() {
if (document.images) {
archives_over = newImage("/images/index/menu/archives_over.jpg");
bio_over = newImage("/images/index/menu/bio_over.jpg");
poetry_over = newImage("/images/index/menu/poetry_over.jpg");
preloadFlag = true;
}
}
</script>
...这是生活在我的 <body>
中的 HTML:
<a href='https://www.foo.com/index.php?page=news'
onmouseover='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'
onmouseout='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'
onmousedown='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'
onmouseup='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'>
<img name="poetry" src="/images/index/menu/poetry_over_static.jpg">
</a>
如果我将 <img name="poetry"
更改为 <img id="poetry"
,整个系统将停止工作。
你的
document[changeImages.arguments[i]]
当第一个参数是 poetry
时,访问 document.poetry
。使用 getElementById
代替 select 具有特定 id 的元素:
function changeImages(id, newSrc) {
document.getElementById(id).src = newSrc;
}
您也可以考虑使用 addEventListener
正确附加监听器,而不是内联处理程序:
const a = <select your <a> tag here>
const img = document.getElementById('poetry');
const fn = () => {
img.src = '/images/index/menu/poetry_over_static.jpg';
}
['mouseover', 'mouseout', 'mousedown', 'mouseup'].forEach((eventType) => {
a.addEventListener(eventType, fn);
});
如果您对页面上的多个图像执行此类操作,则可以通过动态 selecting <a>
的 nextElementSibling
使代码变得更好,让您完全避免使用 ID:
const fn = ({ target }) => {
const img = target.nextElementSibling;
img.src = '/images/index/menu/poetry_over_static.jpg';
}
['mouseover', 'mouseout', 'mousedown', 'mouseup'].forEach((eventType) => {
a.addEventListener(eventType, fn);
});
大约 19 年前,我需要一个使用 onmouseover
事件更改图像的脚本。该脚本使用了 name="foo"
,当然,<img>
标签不再支持它。我真的忘记了脚本是如何工作的,我需要一些帮助来调整它以使用 id="foo"
.
这是我 <head>
中的脚本:
<script>
function newImage(arg) {
if (document.images) {
rslt = new Image();
rslt.src = arg;
return rslt;
}
}
function changeImages() {
if (document.images && (preloadFlag == true)) {
for (var i=0; i<changeImages.arguments.length; i+=2) {
document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
}
}
}
var preloadFlag = false;
function preloadImages() {
if (document.images) {
archives_over = newImage("/images/index/menu/archives_over.jpg");
bio_over = newImage("/images/index/menu/bio_over.jpg");
poetry_over = newImage("/images/index/menu/poetry_over.jpg");
preloadFlag = true;
}
}
</script>
...这是生活在我的 <body>
中的 HTML:
<a href='https://www.foo.com/index.php?page=news'
onmouseover='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'
onmouseout='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'
onmousedown='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'
onmouseup='changeImages("poetry", "/images/index/menu/poetry_over_static.jpg"); return true;'>
<img name="poetry" src="/images/index/menu/poetry_over_static.jpg">
</a>
如果我将 <img name="poetry"
更改为 <img id="poetry"
,整个系统将停止工作。
你的
document[changeImages.arguments[i]]
当第一个参数是 poetry
时,访问 document.poetry
。使用 getElementById
代替 select 具有特定 id 的元素:
function changeImages(id, newSrc) {
document.getElementById(id).src = newSrc;
}
您也可以考虑使用 addEventListener
正确附加监听器,而不是内联处理程序:
const a = <select your <a> tag here>
const img = document.getElementById('poetry');
const fn = () => {
img.src = '/images/index/menu/poetry_over_static.jpg';
}
['mouseover', 'mouseout', 'mousedown', 'mouseup'].forEach((eventType) => {
a.addEventListener(eventType, fn);
});
如果您对页面上的多个图像执行此类操作,则可以通过动态 selecting <a>
的 nextElementSibling
使代码变得更好,让您完全避免使用 ID:
const fn = ({ target }) => {
const img = target.nextElementSibling;
img.src = '/images/index/menu/poetry_over_static.jpg';
}
['mouseover', 'mouseout', 'mousedown', 'mouseup'].forEach((eventType) => {
a.addEventListener(eventType, fn);
});