JavaScript实现图片的放大缩小及拖拽功能示例


Posted in Javascript onMay 14, 2019

本文实例讲述了JavaScript实现图片的放大缩小及拖拽功能。分享给大家供大家参考,具体如下:

实现效果如下:

JavaScript实现图片的放大缩小及拖拽功能示例

实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    div{width:400px;height:400px;overflow:hidden;position:relative;border:1px solid #000;}
    div img{position:absolute;height:100%;width:auto;cursor:move;}
  </style>
</head>
<body>
<div id="div" onmousewheel="return bbimg(this)"><img id="img" border="0" src="img/zs.jpg" /></div>
<script language="javascript">
  var params = {
    zoomVal:1,
    left: 0,
    top: 0,
    currentX: 0,
    currentY: 0,
    flag: false
  };
  //图片缩放
  function bbimg(o){
    var o=o.getElementsByTagName("img")[0];
    params.zoomVal+=event.wheelDelta/1200;
    if (params.zoomVal >= 0.2) {
      o.style.transform="scale("+params.zoomVal+")";
    } else {
      params.zoomVal=0.2;
      o.style.transform="scale("+params.zoomVal+")";
      return false;
    }
  }
  //获取相关CSS属性
  var getCss = function(o,key){
    return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,false)[key];
  };
  //拖拽的实现
  var startDrag = function(bar, target, callback){
    if(getCss(target, "left") !== "auto"){
      params.left = getCss(target, "left");
    }
    if(getCss(target, "top") !== "auto"){
      params.top = getCss(target, "top");
    }
    //o是移动对象
    bar.onmousedown = function(event){
      params.flag = true;
      if(!event){
        event = window.event;
        //防止IE文字选中
        bar.onselectstart = function(){
          return false;
        }
      }
      var e = event;
      params.currentX = e.clientX;
      params.currentY = e.clientY;
    };
    document.onmouseup = function(){
      params.flag = false;
      if(getCss(target, "left") !== "auto"){
        params.left = getCss(target, "left");
      }
      if(getCss(target, "top") !== "auto"){
        params.top = getCss(target, "top");
      }
    };
    document.onmousemove = function(event){
      var e = event ? event: window.event;
      if(params.flag){
        var nowX = e.clientX, nowY = e.clientY;
        var disX = nowX - params.currentX, disY = nowY - params.currentY;
        target.style.left = parseInt(params.left) + disX+ "px";
        target.style.top = parseInt(params.top) + disY+ "px";
        if (typeof callback == "function") {
          callback((parseInt(params.left) || 0) + disX, (parseInt(params.top) || 0) + disY);
        }
        if (event.preventDefault) {
          event.preventDefault();
        }
        return false;
      }
    }
  };
  startDrag(document.getElementById("img"),document.getElementById("img"))
</script>
</body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
学习JavaScript鼠标响应事件
Dec 25 Javascript
JavaScript+html5 canvas绘制的小人效果
Jan 27 Javascript
Bootstrap每天必学之导航条(二)
Mar 01 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
Jun 14 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
用Webpack构建Vue项目的实践
Nov 07 Javascript
Vue仿今日头条实例详解
Feb 06 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 Javascript
vue实现数字动态翻牌的效果(开箱即用)
Dec 08 Javascript
vue实现拖拽效果
Dec 23 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
Nov 11 Javascript
JS Canvas接口和动画效果大全
Apr 29 Javascript
fastadmin中调用js的方法
May 14 #Javascript
vue+elementUI实现表单和图片上传及验证功能示例
May 14 #Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
May 14 #Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 #Javascript
详解jenkins自动化部署vue
May 14 #Javascript
基于JS实现前端压缩上传图片的实例代码
May 14 #Javascript
JavaScript如何实现元素全排列实例代码
May 14 #Javascript
You might like
smarty模板中拼接字符串的方法
2014/02/14 PHP
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
js实现简单的秒表
2020/01/16 Javascript
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
Python异常处理机制结构实例解析
2020/07/23 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
社会学专业学生职业规划书
2014/02/07 职场文书
财务情况说明书范文
2014/05/06 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014教师年度工作总结
2014/11/10 职场文书
投标承诺函格式
2015/01/21 职场文书
银行先进个人总结
2015/02/15 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers