当html中只显式给出调整大小的宽度时,使用javascript来导出图像的高度
Using javascript to derive height of image when only resized width is explicitly given in html
请原谅我对javascript的无知,但我正在尝试创建一个简单的图像悬停,当你将鼠标悬停在图像上时,它会放大图像。(不,我不想使用JQuery。我想直接在javascript中学习这一点!)我的问题是,在html中只指定宽度。省略了高度,以便图像按比例显示在页面上。当我用鼠标悬停在图像上时,javascript在IE中运行良好,但在FF、Chrome、Safari等中运行良好。img.offsetHeight被分配为0,而不是img.offetWidth.的一部分
<script type="text/javascript">
var img=document.getElementById('imageid');
var thiswidth=img.offsetWidth;
var thisheight=img.offsetHeight;
var ratio=thisheight/thiswidth;
var bigwidth=600;
var bigheight=bigwidth*ratio;
function bigImg(x) {
x.style.width=bigwidth;
x.style.height=bigheight;
}
function normalImg(x) {
x.style.width=thiswidth;
x.style.height=thisheight;
}
</script>
<img id="imageid" onmouseover="bigImg(this)" onmouseout="normalImg(this)" src="myimage.jpg" alt="image" width="200" >
正如您从img标记中看到的,高度是通过未指定而与宽度成比例推断的。有人能告诉我如何使用javascript从这个宽度派生出这个高度吗?
这将适用于所有ie FF、Chrome、Safari等
<html>
<body>
<img id="imageid" onmouseover="bigImg(this)" onmouseout="normalImg(this)" src="C810623C.gif" alt="image" width="200" >
<script type="text/javascript">
var img = document.getElementById('imageid');
var normsizeimg = img.style.width;
var bigwidth = 600;
function bigImg(x)
{ x.style.width = bigwidth; }
function normalImg(x) { x.style.width = normsizeimg; }
</script>
</body>
</html>
这就是为什么使用jquery更容易做到这一点的原因,一些浏览器将维度值保持在offsetWidth中,而另一些浏览器则没有;
以下是如何解决问题的提示
var thiswidth=img.offsetWidth;
var thisheight=img.offsetHeight;
//it's non IE browser
if(XMLHttpRequest){
var thisheight=img.clientHeight;
var thiswidth=img.clientWidth;
}
这在Firefox上对我来说很好(对不起,我现在无法访问其他浏览器):
<img id="imageid" src="myimage.jpg" alt="image" width="200" >
<script type="text/javascript">
var img = document.getElementById('imageid');
img.onload = function(){
var thiswidth = img.offsetWidth;
var thisheight = img.offsetHeight;
var ratio = thisheight/thiswidth;
var bigwidth = 600;
var bigheight = bigwidth*ratio;
img.onmouseover = function bigImg() {
img.style.width = bigwidth;
img.style.height = bigheight;
}
img.onmouseout = function normalImg(x) {
img.style.width = thiswidth;
img.style.height = thisheight;
}
};
</script>
此代码与您的代码之间的主要区别在于:
- 我只是在元素声明之后才访问它
- 我只在图像加载后访问其属性
我稍后也只添加onmouseover和onmouseout属性,因为它使HTML看起来更干净,但这是可选的。
更新:实际上,在之后添加事件处理程序并不是可选的,因为它们使用了计算的bigwidth
和bigheight
,这两个值只有在图像加载后才可用。
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何使用javascript或html下载PDF格式的填写表单
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 如何使用javascript从主svg对象动态创建svg视图框
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 使用Javascript获取所选选项ID
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 使用javascript从数据库中添加表
- JSON.parse没有'不能使用Javascript
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 可以't使用JavaScript获取width属性
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 使用javascript在Flash中加载外部图像
- 使用Javascript创建测验页面
- 在PHP中使用javascript更改页面标题'if'
- 使用javascript函数在页面初始化后加载jquery
- 无法使用javascript检索SPList项
- 使用javascript存储变量的最安全方式
- 使用javascript搜索具有用户输入的数组