通过悬停 ul li 来切换图片
toggle pictures by hovering ul li
我只需要 javascript 解决方案。请参考this demo。
目标是将点悬停在右下角并相应地交换图像。但是它现在所做的是悬停时显示空白页面,并且整个 ul
变为垂直并转到左上角。我这里做错了什么???
HTML:
<div id="wrapper">
<section id="contentWrapper">
<div id="resistorContent" class="content">
<section id="resistorDetail1"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic1.jpg"></section>
<section id="resistorDetail2"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic2.jpg"></section>
<section id="resistorDetail3"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic3.jpg"></section>
<section id="resistorDetail4"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic4.jpg"></section>
<ul>
<li onMouseOver="showDetail(resistorDetail1)"></li>
<li onMouseOver="showDetail(resistorDetail2)"></li>
<li onMouseOver="showDetail(resistorDetail3)"></li>
<li onMouseOver="showDetail(resistorDetail4)"></li>
</ul>
</div>
</section>
</div>
JAVASCRIPT:
<script type="text/javascript">
var children = document.querySelectorAll('.content > section[id]')
function showDetail(target){
for (var i = 0, child; child = children[i]; i++) {
child.style.display = 'none';
}
document.getElementById(target).style.display = 'block';
}
</script>
可能发生碰撞CSS ?:
.content section:not(:first-child) {
display: none;
}
提前致谢!!
TL;DR
这是工作 fiddle:https://jsfiddle.net/2qz2srqs/3/
原因
您的代码非常接近,但有一些小问题。
第一个是复制粘贴错误,您有两个 ID 为 resistorDetail3
的元素。
其次,onmouseover
事件的语法不正确。在任何 javascript 前加上 javascript:
并确保其语法正确。
第三,您的 showDetail
方法需要显示元素的字符串 id
。在你的 onmouseover
声明中你有 showDetail(resistorDetail1)
而不是 showDetail('resistorDetail1')
.
最后,当您在 HTML 中引用 javascript 时,您需要确保首先加载 javascript。只需查看开发人员的控制台,您就可以通过错误 "showDetail is not defined.
看到它。我将其切换为 No wrap - in <body>
并且工作正常。
但是 我强烈建议不要直接引用 HTML 中的 javascript。相反,首先加载 HTML,然后使用 javascript 的 DOM 就绪事件来绑定您的事件。这将增加您的加载时间,并在需要时更容易切换到 jQuery/Zepto 之类的内容。
完整代码
HTML
<section id="contentWrapper">
<div id="resistorContent" class="content">
<section id="resistorDetail1">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic1.jpg" />
</section>
<section id="resistorDetail2">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic2.jpg" />
</section>
<section id="resistorDetail3">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic3.jpg" />
</section>
<section id="resistorDetail4">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic4.jpg" />
</section>
<ul>
<li onmouseover="javascript: showDetail('resistorDetail1')"></li>
<li onmouseover="javascript: showDetail('resistorDetail2')"></li>
<li onmouseover="javascript: showDetail('resistorDetail3')"></li>
<li onmouseover="javascript: showDetail('resistorDetail4')"></li>
</ul>
</div>
</section>
JS
var children = document.querySelectorAll('.content > section[id]');
function showDetail(target) {
for (var i = 0, child; child = children[i]; i++) {
child.style.display = 'none';
}
document.getElementById(target).style.display = 'block';
}
CSS
(unchanged)
这是另一个工作 fiddle。
https://jsfiddle.net/2qz2srqs/4/
问题有两点。
您将未定义的变量传递到您的 onmouseover
属性中。你想要字符串(我引用了它们)
在 JSFiddle 中,您不会自动获得 window 作用域,因此您必须将函数分配为 window 的 属性 如果您希望能够用事件属性命中它。
我只需要 javascript 解决方案。请参考this demo。
目标是将点悬停在右下角并相应地交换图像。但是它现在所做的是悬停时显示空白页面,并且整个 ul
变为垂直并转到左上角。我这里做错了什么???
HTML:
<div id="wrapper">
<section id="contentWrapper">
<div id="resistorContent" class="content">
<section id="resistorDetail1"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic1.jpg"></section>
<section id="resistorDetail2"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic2.jpg"></section>
<section id="resistorDetail3"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic3.jpg"></section>
<section id="resistorDetail4"><img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic4.jpg"></section>
<ul>
<li onMouseOver="showDetail(resistorDetail1)"></li>
<li onMouseOver="showDetail(resistorDetail2)"></li>
<li onMouseOver="showDetail(resistorDetail3)"></li>
<li onMouseOver="showDetail(resistorDetail4)"></li>
</ul>
</div>
</section>
</div>
JAVASCRIPT:
<script type="text/javascript">
var children = document.querySelectorAll('.content > section[id]')
function showDetail(target){
for (var i = 0, child; child = children[i]; i++) {
child.style.display = 'none';
}
document.getElementById(target).style.display = 'block';
}
</script>
可能发生碰撞CSS ?:
.content section:not(:first-child) {
display: none;
}
提前致谢!!
TL;DR
这是工作 fiddle:https://jsfiddle.net/2qz2srqs/3/
原因
您的代码非常接近,但有一些小问题。
第一个是复制粘贴错误,您有两个 ID 为 resistorDetail3
的元素。
其次,onmouseover
事件的语法不正确。在任何 javascript 前加上 javascript:
并确保其语法正确。
第三,您的 showDetail
方法需要显示元素的字符串 id
。在你的 onmouseover
声明中你有 showDetail(resistorDetail1)
而不是 showDetail('resistorDetail1')
.
最后,当您在 HTML 中引用 javascript 时,您需要确保首先加载 javascript。只需查看开发人员的控制台,您就可以通过错误 "showDetail is not defined.
看到它。我将其切换为 No wrap - in <body>
并且工作正常。
但是 我强烈建议不要直接引用 HTML 中的 javascript。相反,首先加载 HTML,然后使用 javascript 的 DOM 就绪事件来绑定您的事件。这将增加您的加载时间,并在需要时更容易切换到 jQuery/Zepto 之类的内容。
完整代码
HTML
<section id="contentWrapper">
<div id="resistorContent" class="content">
<section id="resistorDetail1">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic1.jpg" />
</section>
<section id="resistorDetail2">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic2.jpg" />
</section>
<section id="resistorDetail3">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic3.jpg" />
</section>
<section id="resistorDetail4">
<img src="http://d3d71ba2asa5oz.cloudfront.net/40000483/images/pic4.jpg" />
</section>
<ul>
<li onmouseover="javascript: showDetail('resistorDetail1')"></li>
<li onmouseover="javascript: showDetail('resistorDetail2')"></li>
<li onmouseover="javascript: showDetail('resistorDetail3')"></li>
<li onmouseover="javascript: showDetail('resistorDetail4')"></li>
</ul>
</div>
</section>
JS
var children = document.querySelectorAll('.content > section[id]');
function showDetail(target) {
for (var i = 0, child; child = children[i]; i++) {
child.style.display = 'none';
}
document.getElementById(target).style.display = 'block';
}
CSS
(unchanged)
这是另一个工作 fiddle。
https://jsfiddle.net/2qz2srqs/4/
问题有两点。
您将未定义的变量传递到您的
onmouseover
属性中。你想要字符串(我引用了它们)在 JSFiddle 中,您不会自动获得 window 作用域,因此您必须将函数分配为 window 的 属性 如果您希望能够用事件属性命中它。