代码改变世界

javascript 简单的图片放大效果(一)

  VVG  阅读(2861)  评论(5编辑  收藏  举报

图片放大实例

 
复制代码
HTML源代码:
复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>图片放大实例</title>
<script type="text/javascript" src="javascript/vvg-base.js"></script>
<style type="text/css">
*
{margin:0;padding:0;}
#box
{ width:604px; margin: 20px auto; overflow: hidden;}
#small,#big
{ border:1px solid #000; width:300px; height:300px; float:left; overflow: hidden;}
#small
{ position: relative;}
#big
{border-left:none; position: relative; z-index:100px; display:none;}
#mask
{ position:absolute; z-index:100px; width:100px; height:100px; background:#999; left:0; top:0; border:1px solid #000; cursor:crosshair; display:none;}
#bigImg
{position: absolute;}
</style>
</head>
<body>
<div id="box">
<div id="small">
<a href="images/big.jpg">
<img src="http://pic002.cnblogs.com/images/2012/352980/2012040420342427.jpg" id="smallImg" zoom="images/big.jpg"/>
</a>
<div id="mask"></div>
</div>
<div id="big"><img src="http://pic002.cnblogs.com/images/2012/352980/2012040420351855.jpg" id="bigImg" width="900" height="900"/></div>
</div>
<script type="text/javascript">
(
function(){
var small = VVG.DOM.$("small");
var mask = VVG.DOM.$("mask");
var bigImg = VVG.DOM.$("bigImg");
var big = VVG.DOM.$("big");
var smallImg = VVG.DOM.$("smallImg");
VVG.DOM.setOpacity( mask,
70 );
var smallX = small.offsetLeft;
var smallY = small.offsetTop;
var smallW = small.offsetWidth;
var smallH = small.offsetHeight;
function maskMove(event){
mask.style.display
= "block";
big.style.display
= "block";
var event = VVG.DOM.getEvent(event);
var target = mask;
var maskW = target.offsetWidth;
var maskH = target.offsetHeight;
var sTop = document.documentElement.scrollTop || document.body.scrollTop;
var mouseX = event.clientX;
var mouseY = event.clientY + sTop;
// console.log(mouseX +"+" + mouseY);
target.style.left = (mouseX - smallX - maskW/2 ) +"px";
target.style.top = (mouseY - smallY - maskH/2 ) +"px";
if((mouseX - smallX)<maskW/2){
target.style.left = "0px";
}
else if((mouseX - smallX) >(smallW-maskW +maskW/2)){
target.style.left = (smallW-maskW ) + "px";
}
if((mouseY - smallY) <maskH/2){
target.style.top ="0px";
}
else if((mouseY-smallY) > (smallH - maskH +maskH/2)){
target.style.top = (smallH - maskH) +"px";
}
showBigImg(parseInt(target.style.left),parseInt(target.style.top));
}
function maskHidden(){
//console.log("hidden");
mask.style.display = "none";
big.style.display
= "none";

}
function showBigImg(left,top){
left
=left * 3;
top
= top * 3;

bigImg.style.left
= -left + "px";
bigImg.style.top
= -top + "px";

console.log(left
+"+" +top +"+"+bigImg.style.left);


}
VVG.DOM.bindEvent(small,
"mousemove",maskMove);
VVG.DOM.bindEvent(small,
"mouseout",maskHidden);
})()

</script>
</body>
</html>
复制代码


复制代码

简单函数封装 :vvg-base.js

var VVG = {};
VVG.DOM = {
    $: function(id) {
        return typeof id == "string" ? document.getElementById(id) : id;
    },
    $$: function(tag, parent) {
        return parent.getElementsByTagName(tag);
    },
    bindEvent: function(node, type, func) {
        if (node.addEventListener) {
            node.addEventListener(type, func, false);
        } else if (node.attachEvent) {
            node.attachEvent("on" + type, func);
        } else {
            node["on" + type] = func;
        }
    },
    unbindEvent: function(node, type, func) {
        if (node.removeElementListener) {
            node.removeElementListener(type, func, false);
        } else if (node.detachEvent) {
            node.detachEvent("on" + type, func);
        } else {
            node["on" + type] = null;
        }
    },
    getEvent: function(event) {
        return event ? event : window.event;
    },
    getTarget: function(event) {
        return event.target || event.srcElement;
    },
    preventDefault: function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },
    stopBubble: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble = true;
        }
    },
    setOpacity:function(node,value){
        if(document.all){
            node.style.filter = "alpha(opacity = "+ value +")";
        }else{
            node.style.opacity = value/100;
        }
    },
    setCss:function( node,cssJson){
        for(var i in cssJson){
            if(i =="opacity"){
                VVG.DOM.setOpacity(node,cssJson[i]);
            }else{
                node.style[i] = cssJson[i];
            }
        }
        return node;
    }
}

 

 

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示