jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
来源: 阅读:905 次 日期:2016-06-20 16:02:06
温馨提示: 小编为您整理了“jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)”,方便广大网友查阅!

这篇文章主要介绍了jQuery自定义图片缩放拖拽插件imageQ实现方法,涉及jQuery扩展操作及页面元素操作技巧,并附带了完整的demo源码供读者下载参考,需要的朋友可以参考下

本文实例讲述了jQuery自定义图片缩放拖拽插件imageQ实现方法。分享给大家供大家参考,具体如下:

综合网上一些代码 自己写的一个图片缩放拖拽的小插件

/**

 *

 * <a href="http://lib.csdn.net/base/22" class='replace_word' title="jQuery知识库" target='_blank' style='color:#df3434; font-weight:bold;'>jQuery</a> imageQ plugin

 * @name jquery-imageQ.js

 * @author Q

 * @date 2011-01-19

 * maxRatio 最大放大比例

 * minRatio 最小缩小比例

 * changeRadio 每次变化幅度

 * picUrl:图片地址,

 * picWidth:图片宽度,

 * picHeight:图片高度,

 * reset:是否重设图片

 *

 */

(function($){

  var status = false;

  $.fn.imageQ = function(options){

    var defaults = {

      maxRatio:4,

      minRatio:4,

      changeRadio:0.2,

      picUrl:'',

      picWidth:306,

      picHeight:372,

      reset:false

    }

    var options=jQuery.extend(defaults,options);

    return this.each(function(){

      status = true;

      $(this).attr('src','');

      $(this).attr('src',options.picUrl);

      var naturalwidth = options.picWidth;

      var naturalheight = options.picHeight;

      var minwidth = Math.round(naturalwidth/options.minRatio);

      var minheight = Math.round(naturalheight/options.minRatio);

      var maxwidth = Math.round(naturalwidth*options.maxRatio);

      var maxheight = Math.round(naturalheight*options.maxRatio);

      if(options.reset)

      {

        $("#wrapDiv").css("width",naturalwidth+"px");

        $("#wrapDiv").css("height",naturalheight+"px");

        $("#wrapDiv").css("top",'0px');

        $("#wrapDiv").css("left",'0px');

      }

      else

      {

        $(this).css("width","100%");

        $(this).css("height","100%");

        $(this).wrap("<div id='wrapDiv' style='-moz-user-select: none;width:"+naturalwidth+"px;height:"+naturalheight+"px;cursor:move;position:relative;top:0px;left:0px;visibility: visible;' ondragstart='return false;' onselectstart='return false;'></div>");

        $("#wrapDiv").before('<div style="visibility: visible; height: 26px; width: 78px; display: block; position: absolute; line-height: 1px; cursor: pointer; left: 0px; top: 0px;z-index:1;"><div id="plusTool"></div><div id="minusTool"></div><div id="moveTool"></div></div>');

        //$("#wrapDiv").append('<div style="display: block; position: relative; left: 0px; top: 0px; width: 100%; height: 100%; -moz-user-select: none;" id="uploaduserpng"></div>');

        $("#plusTool").attr('title','放大');

        $("#minusTool").attr('title','缩小');

        $("#moveTool").attr('title','拖动');

        $("#plusTool").bind("click",function(){

          _changeOperate('plus');

        });

        $("#minusTool").bind("click",function(){

          _changeOperate('minus');

        });

        $("#moveTool").bind("click",function(){

          _changeOperate('move');

        });

        function plusOperate()

        {

          $("#wrapDiv").unbind();

          $("#wrapDiv").unbind();

          $("#wrapDiv").bind("click",function(){

              var h = $("#wrapDiv").height();

              var w = $("#wrapDiv").width();

              if(Math.round(h*(1+options.changeRadio)) >= maxheight)

              {

                var newH = maxheight;

              }

              else

              {

                var newH = Math.round(h*(1+options.changeRadio));

              }

              if(Math.round(w*(1+options.changeRadio)) >= maxwidth)

              {

                var newW = maxwidth;

              }

              else

              {

                var newW = Math.round(w*(1+options.changeRadio));

              }

              $("#wrapDiv").css("width",newW+"px");

              $("#wrapDiv").css("height",newH+"px");

            });

        }

        function minusOperate()

        {

          $("#wrapDiv").unbind();

          $("#wrapDiv").unbind();

          $("#wrapDiv").bind("click",function(){

              var h = $("#wrapDiv").height();

              var w = $("#wrapDiv").width();

              if(Math.round(h*(1-options.changeRadio)) <= minheight)

              {

                var newH = minheight;

              }

              else

              {

                var newH = Math.round(h*(1-options.changeRadio));

              }

              if(Math.round(w*(1-options.changeRadio)) <= minwidth)

              {

                var newW = minwidth;

              }

              else

              {

                var newW = Math.round(w*(1-options.changeRadio));

              }

              $("#wrapDiv").css("width",newW+"px");

              $("#wrapDiv").css("height",newH+"px");

            });

        }

        function moveOperate()

        {

          $("#wrapDiv").unbind();

          var _move = false;

          var _x,_y;

          $("#wrapDiv").bind("mousedown",function(e){

            _setCursor('grabbing');

            _move = true;

            if(!document.all)

            {

              _x = e.pageX - parseInt($("#wrapDiv").css("left"));

              _y = e.pageY - parseInt($("#wrapDiv").css("top"));

            }

            else

            {

              var pagex = e.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);

              var pagey = e.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop);

              _x = pagex - parseInt($("#wrapDiv").css("left"));

              _y = pagey - parseInt($("#wrapDiv").css("top"));

            }

          });

          $("#wrapDiv").bind("mouseup",function(e){

            _setCursor('grab');

            _move = false;

          });

          $("#wrapDiv").bind("mousemove",function(e){

            if(_move)

            {

              if(!document.all)

              {

                var pagex = e.pageX;

                var pagey = e.pageY;

              }

              else

              {

                var pagex = e.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);

                var pagey = e.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop);

              }

              var x = pagex-_x;

              var y = pagey-_y;

              $("#wrapDiv").css("top",y);

              $("#wrapDiv").css("left",x);

            }

          });

        }

        function _setCursor(type){

          $("#wrapDiv").css("cursor","url('images/cursors/"+type+".cur'),default");

        }

        function _changeOperate(operate)

        {

          if(operate == 'plus')

          {

            _setCursor('zoom-in');

            plusOperate();

          }

          if(operate == 'minus')

          {

            _setCursor('zoom-out');

            minusOperate();

          }

          if(operate == 'move')

          {

            _setCursor('grab');

            moveOperate();

          }

        }

      }

    });

  };

  $.fn.imageQ.getStatus = function()

  {

    return status;

  };

})(jQuery);

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

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map