wuyunxian

头像

Opera 9.0
UID: 45484
帖子: 4060
注册时间: 2009-04-17 21:42
在线状态: 线上

Drag&Drop&Zoom Image.js 求10.50的兼容修改

// ==UserScript==
// @author      DemoJameson
// @description 使 Opera 图片浏览页面的图片可以拖拽,左键点击页面则可以缩放图片
// @exclude *.html
// @exclude *.htm
// @exclude *.jsp
// @exclude *.php
// @exclude *.aspx
// @exclude *.asp
// ==/UserScript==

document.addEventListener("DOMContentLoaded", function () {
    // 判断是否为图片浏览页面
    var oLinks = document.getElementsByTagName("link");
    if (oLinks && oLinks.length == 1 && oLinks[0].href == "opera:style/image.css") {
      // ------------------------ 设置项 ------------------------
      var bDragDrop = true;            // 是否允许拖拽移动图片
      var bZoom = true;               // 是否允许缩放图片

      var oMode= {
         defaultMode: "NORMAL",   // 打开页面时图片的默认模式,任选其一:NORMAL、FIT_TO_WINDOW、FIT_TO_WIDTH、FIT_TO_HEIGHT
         NORMAL: 0,                  // 从默认模式开始,按数字从小到大循环切换;如不想使用某模式,则将其设为负数(如 -1、-2,不能重复)。
         FIT_TO_WIDTH: 1,
         FIT_TO_HEIGHT: -3,
         FIT_TO_WINDOW: 2
         };
      // ------------------------ 设置项 ------------------------

      var oBody = document.body,
         oDiv = document.getElementsByTagName("div")[0],
         oImg = oDiv.getElementsByTagName("img")[0];

      var iDiffX,   iDiffY;

      var iPosXBefore, iPosYBefore, iPosXAfter, iPosYAfter;

      // 获取有效的模式的数目,添加类数组的元素
      oMode.length = 0;
      for (var mode in oMode) {
         if (typeof(oMode[mode]) === "number" && mode != "length" && oMode[mode] >= 0) {
            oMode[oMode.length++] = mode;
         }
      }

      // 创建一个数组,用于保存每个模式切换前滚动条的位置
      var aPageOffset = [];
      for (var i = 0, iLength = oMode.length; i < iLength; i++) {
         aPageOffset[i] = {
            pageXOffset: 0,
            pageYOffset: 0
         }
      }

       // 设置图片居中
      oImg.alt = "";
      var iCount = 0;
      var iIntervalID = setInterval(function () {
         if (oImg.width > 1 || iCount++ > 50) {
            window.clearInterval(iIntervalID);
            oImg.removeAttribute("alt");
            oDiv.style.position = "absolute";
            oDiv.style.height = "auto";
            if (bZoom) {
               oMode.mode = oMode[oMode.defaultMode];
               resizeImgage();
            } else {
               setImageCenter();
            }
         }
      }, 100);

      // 拖拽
      if (bDragDrop) {
         document.addEventListener("mousedown", handleMouseDown, false);
      }

      // 缩放
      if (bZoom) {
         document.addEventListener("mouseup", handleMouseUp_ZomeImage, false);
      }

        // 拖拽处理函数
        function handleMouseDown(oEvent) {
         iPosXBefore = oEvent.clientX;
         iPosYBefore = oEvent.clientY;

            if(oEvent.button == 0 && oEvent.target.nodeName == "IMG") {
            iDiffX = oEvent.clientX - oDiv.offsetLeft;
            iDiffY = oEvent.clientY - oDiv.offsetTop;
            document.addEventListener("mousemove", handleMouseMove, false);
            document.addEventListener("mouseup", handleMouseUp, false);
            document.addEventListener("blur", handleMouseUp, false);
            }

        }

        function handleMouseMove(oEvent) {
            oDiv.style.left = oEvent.clientX - iDiffX;
            oDiv.style.top = oEvent.clientY - iDiffY;
        }

        function handleMouseUp(oEvent) {
         // 停止拖拽
         document.removeEventListener("mousemove", handleMouseMove, false);
         document.removeEventListener("mouseup", handleMouseUp, false);
         document.removeEventListener("blur", handleMouseUp, false);
      }

      function handleMouseUp_ZomeImage(oEvent) {
         // 鼠标按下与松开时在同一位置才缩放图像
         iPosXAfter = oEvent.clientX;
         iPosYAfter = oEvent.clientY;
         if (Math.abs(iPosXAfter-iPosXBefore) < 5 && Math.abs(iPosYAfter-iPosYBefore) < 5) {
            resizeImgage();
         }
      }

      function resizeImgage() {
         // 记录滚动条位置
         aPageOffset[oMode.mode].pageXOffset = window.pageXOffset - oDiv.offsetLeft;
         aPageOffset[oMode.mode].pageYOffset = window.pageYOffset - oDiv.offsetTop;

         // 还原图片
         oImg.style = "";
         oDiv.style.top = oDiv.style.left = "0px";

         // 重新调整图片
         switch (oMode.mode) {
            case oMode.FIT_TO_WINDOW:
               oImg.style.maxHeight = window.innerHeight + "px";
               oImg.style.maxWidth = window.innerWidth + "px";
               break;
            case oMode.FIT_TO_WIDTH:
               oImg.style.width = window.innerWidth + "px";
               break;
            case oMode.FIT_TO_HEIGHT:
               oImg.style.height = window.innerHeight + "px";
               break;
         }
         setImageCenter();
         // 下一模式
         oMode.mode = ++oMode.mode % oMode.length;
         // 还原滚动条位置
         window.scrollTo(aPageOffset[oMode.mode].pageXOffset, aPageOffset[oMode.mode].pageYOffset);
      }

      // 使图片居中
      function setImageCenter() {
         if (oBody.clientHeight > oImg.height) {
            oDiv.style.top = (oBody.clientHeight - oImg.height) / 2;
         }
         if (oBody.clientWidth > oImg.width) {
            oDiv.style.left = (oBody.clientWidth - oImg.width) / 2;
         }
      }
    }
},false);


在10.50中,点击右键会自动将图片居中并且进行模式转换。求修改,点击右键的时候仅仅只弹出菜单~
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.2.15 Version/10.10页首

Opera 中文维基 / Opera 10.61 正式版 - 极速安全的浏览体验 / Opera Mini 5.1 正式版 - 为超过 3000 款手机优化

DemoJameson

头像

论坛版主
UID: 31615
帖子: 7552
注册时间: 2008-11-16 13:11
在线状态: 线上
Drag & Drop & Zoom Image.7z
您没有权限查看这个主题的附件。
Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.5.22 Version/10.51页首
wuyunxian

头像

Opera 9.0
UID: 45484
帖子: 4060
注册时间: 2009-04-17 21:42
在线状态: 线上
哈……看起来获取文件大小还是没有突破啊~

谢谢dj~~O(∩_∩)O~
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.2.15 Version/10.10页首
.。oOO

头像

Opera 7.52
UID: 27177
帖子: 1628
注册时间: 2008-09-06 9:59
在线状态: 离线
您的首选浏览器是: Opera
为什么选择 Opera: 别无选择
DJ,3388下适合宽度开启,当图片尺寸超过窗口大小用overflow:hidden隐藏滚动条不起作用,能不能永久禁止滚动条(针对图片),最好还能隐藏地址栏
 

            巭孬嫑咬鹅


菜鸟乐园按钮无图标链接打开方式

Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.5.24 Version/10.54页首
maxmara2

头像

Opera 6.0
UID: 24113
帖子: 860
注册时间: 2008-06-23 17:59
在线状态: 离线
您的首选浏览器是: Opera
为什么选择 Opera: 表格 “为什么选择 Opera” 内容太长,最多允许 100 个字符。表格 “为什么选择 Opera” 内容太长,最多允许 100 个字符。
话说这个脚本能用在ff下吗 ....
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6页首
好人™

头像

Opera 1.0
UID: 88860
帖子: 44
注册时间: 2010-06-04 22:56
在线状态: 离线
您的首选浏览器是: Opera
为什么选择 Opera: 想用就用
这个是谁发布的,授权了么

http://extendopera.org/userjs/content/d ... oom-images
Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.6.30 Version/10.70页首