改造discuz点击图片,滚轮缩放图片(可任意拖移)插件

今天给大家带来一款图片的缩放插件。该插件适用浏览器:IE9及IE9 +、360、Chrome、Firefox、Safari、Opera。

首先展示discuz论坛图片的插件,它具有在新窗口打开、显示实际大小以及关闭三个功能,效果图如下:

其实现代码为:

【html】

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>diszuc点击图片放大、拖动、鼠标滚动缩放</title>
  <meta name="keywords" content="diszuc点击图片放大、拖动、鼠标滚动缩放" />
  <meta name="description" content="diszuc点击图片放大、拖动、鼠标滚动缩放" />
  <link rel="stylesheet" type="text/css" href="img/style_1_forum_viewthread.css" />
  <script type="text/javascript">
    var IMGDIR = ‘img/‘, VERHASH = ‘zfhf‘, JSPATH = ‘js/‘; //全局设置,必不可少,否则无法正常使用
  </script>
<script src="js/common.js" type="text/javascript"></script>  //可自行在网上下载
</head>

<body>
<div id="append_parent"></div>
<div id="ajaxwaitid"></div>

<img id="aimg_156139" aid="156139" src="img/none.gif" zoomfile="uploadfiles/100306znrbsxfzuclbplu6.jpg" file="uploadfiles/100306znrbsxfzuclbplu6.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="400" alt="我是一朵花" title="我是一朵花" />

<script src="js/forum_viewthread.js" type="text/javascript"></script>

<script type="text/javascript">
  zoomstatus = parseInt(1);
  var imagemaxwidth = ‘500‘;
  var aimgcount = new Array();
</script>

<script type="text/javascript" reload="1">
  aimgcount[1000] = [‘156139‘,‘156140‘,‘156141‘];
  attachimggroup(1000);
  attachimgshow(1000);
  var aimgfid = 0;
</script>

</body>
</html>

【css】--style_1_forum_viewthread.css

*{word-wrap:break-word;}body,input,button,select,textarea{font:12px/1.5 Tahoma,‘Microsoft Yahei‘,‘Simsun‘;color:#444;}.z{float:left;}.y{float:right;}.hm{text-align:center;}

.zoom{cursor:pointer;}
.zoominner{
  padding:5px 10px 10px;
  background:#FFF;
  text-align:left;
}
.zoominner p{padding:8px 0;}
.zoominner p a{
  float:left;
  margin-left:10px;
  width:17px;
  height:17px;
  background:url(imgzoom_tb.gif) no-repeat 0 0;
  line-height:100px;
  overflow:hidden;
}
.zoominner p a:hover{background-position:0 -39px;}
.zoominner p a.imgadjust{background-position:-40px 0;}
.zoominner p a.imgadjust:hover{background-position:-40px -39px;}
.zoominner p a.imgclose{background-position:-80px 0;}
.zoominner p a.imgclose:hover{background-position:-80px -39px;}
.zimg_c{position:relative;}
.zimg_prev,.zimg_next{
  display:block;
  position:absolute;
  width:80px;
  height:100%;
  background:url(pic-prev.png) no-repeat 0 -100px;
  cursor:pointer;
}
.zimg_next{
  right:10px;
  background-image:url(pic-next.png);
  background-position:100% -100px;
}
.zimg_c img{margin:0 auto;}
.zimg_p strong{display:none;}

【js】--forum_viewthread.js

/*
    [Discuz!] (C)2001-2099 Comsenz Inc.
    This is NOT a freeware, use is subject to license terms

    $Id: forum_viewthread.js 28794 2012-03-13 05:39:46Z zhangguosheng $
*/

var replyreload = ‘‘, attachimgST = new Array(), zoomgroup = new Array(), zoomgroupinit = new Array();

function attachimggroup(pid) {
    if(!zoomgroupinit[pid]) {
        for(i = 0;i < aimgcount[pid].length;i++) {
            zoomgroup[‘aimg_‘ + aimgcount[pid][i]] = pid;
        }
        zoomgroupinit[pid] = true;
    }
}

function attachimgshow(pid, onlyinpost) {
    onlyinpost = !onlyinpost ? false : onlyinpost;
    aimgs = aimgcount[pid];
    aimgcomplete = 0;
    loadingcount = 0;
    for(i = 0;i < aimgs.length;i++) {
        obj = $(‘aimg_‘ + aimgs[i]);
        if(!obj) {
            aimgcomplete++;
            continue;
        }
        if(onlyinpost && obj.getAttribute(‘inpost‘) || !onlyinpost) {
            if(!obj.status) {
                obj.status = 1;
                if(obj.getAttribute(‘file‘)) obj.src = obj.getAttribute(‘file‘);
                loadingcount++;
            } else if(obj.status == 1) {
                if(obj.complete) {
                    obj.status = 2;
                } else {
                    loadingcount++;
                }
            } else if(obj.status == 2) {
                aimgcomplete++;
                if(obj.getAttribute(‘thumbImg‘)) {
                    thumbImg(obj);
                }
            }
            if(loadingcount >= 10) {
                break;
            }
        }
    }
    if(aimgcomplete < aimgs.length) {
        setTimeout(function () {
            attachimgshow(pid, onlyinpost);
        }, 100);
    }
}

  只要以上代码,就可以轻松实现图片随鼠标滚动而自由缩放大小了,是不是很简单呢?但是作为一个爱前端的程序媛,怎么能仅限于此?同时也加上客户的需求,在discuz的基础上增加了下载、旋转两个功能,先贴效果图:

  demo地址:http://zyk3.ataw.cn/discuz/index.html

再者其实现代码为:

【css代码】-- style_1_forum_viewthread.css

.zoom_text {
  position: fixed;
  bottom: 0;
  left: 50%;
  margin-left: -130px;
  height: 50px;
  line-height: 60px;
  padding: 0 50px;
  background: rgba(0,0,0,.5);
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
}
.zoom_text span {
  display: block;
  width: 100%;
  text-align: center;
}
.zoom_text a {
  display: inline-block;
  margin-left: 10px;
  width: 22px;
  height: 22px;
  line-height: 100px;
  overflow: hidden;
}
.zoom_text a.imglink {
  background: url(imglink.png);
}
.zoom_text a.imgdownload {
  background: url(imgdownload.png);
}
.zoom_text a.imgadjust {
  background: url(imgadjust.png);
}
.imgroate {
  display: inline-block;
  width: 17px;
  height: 17px;
  margin-left: 10px;
  background: url(imgroate.png) !important;
}
.zoom_text a.imgclose {
  background: url(imgclose.png);
}

【js代码】--common_extra.js

注:<head></head>中间必须加  var IMGDIR = ‘img/‘, VERHASH = ‘zfhf‘, JSPATH = ‘js/‘;否则无法生成common_extra.js文件,因而导致页面无法正常显示。

在common_extra.js文件中找到menu.innerHTML,并且添加两个a标签,其代码为:

‘<p class="zoom_text"><span class="y">‘ + ‘<a href="javascript:;" onclick="_ACT_imgupload(this);" class="imgdownload" title="下载"></a>‘ + ‘<a id="‘ + menuid + ‘_imglink" class="imglink" target="_blank" title="在新窗口打开"></a><a id="‘ + menuid + ‘_adjust" href="javascipt:;" class="imgadjust" title="实际大小"></a>‘ + ‘<a href="javascript:;" onclick="_ACT_imgroate(this);" class="imgroate" title="旋转"></a>‘ + ‘<a href="javascript:;" onclick="hideMenu()" class="imgclose" title="关闭"></a>‘ + ‘</span></p>‘ 

这样两个新增的下载和旋转按钮就可以成功添加。当然要想实现功能,还要另外写事件。其中_ACT_imgupload方法为

window._ACT_imgupload = function (dom) {
    var _$dom = $(dom);
    var _$pic = _$dom.parent().parent().parent().find("#imgzoom_zoom");
    if (_$pic.length > 0) {
        window.open(_$pic.attr("src"));
     }
}

_ACT_imgroate方法为

window._ACT_imgroate = function (dom) {
    var _$dom = $(dom);
    var _$pic = _$dom.parent().parent().parent().find("#imgzoom_zoom");
    if (_$pic.length > 0) {
       var _ra = _$pic.data("raval");
       if (!_ra) _ra = 0;
       if (_$pic.attr("isleft") != "0") {
           _$pic.css(‘rotate‘, _ra + 90);
           _$pic.data("raval", _ra + 90);
       }
       else {
           _$pic.css(‘rotate‘, _ra - 90);
           _$pic.data("raval", _ra - 90);
      }
      return false;
    }
}

  好了,到这里为止就是全部的实现代码,有没有跃跃一试的感觉呢?体验一下高大上的图片缩放效果。为了能更好地使用这个插件,另外再分享一下在此过程中遇到的几个问题,希望可以帮助到大家。

【常见问题】:

1.图片不能随鼠标滚动而放大缩小

解决方法:上传的图片大小应控制在宽度width ≠ 600px

2.在使用下载和旋转功能按钮时,需载入jquery.js和jquery.rotate.js两个文件

3.载入2上的两个js文件之后,点击图片,无法正常显示,报错信息为"无法获取 obj.getAttribute(‘file‘) ","Cannot read property‘parentNode‘ of undefined"

 解决方法:(1)将common.js文件中的

function $(id) {
    return !id ? null : document.getElementById(id);
}

改为

function G_$_D(id) {
    return !id ? null : document.getElementById(id);
}

(2)将common_extra.js文件中的"$"改为G_$_D

4.页面中无法自动生成common_extra.js文件

 解决方法:在页面中手动引入文件即可

时间: 2024-11-10 07:41:41

改造discuz点击图片,滚轮缩放图片(可任意拖移)插件的相关文章

点击按钮,缩放图片(img.width、img.style.width、img.offsetWidth)

前几天在慕课网上看到一个关于图片缩放的教学视频,因为当时对老师使用img.width,而不是使用img.style.width而感到奇怪,所以周末得空了,想来自己试着写出来,相关视频网址如下:http://www.imooc.com/video/1111: 最开始想着按照视频使用定时器的思路来写,但是写到后面发现使用 img.width实现不了效果,然后就按照传参的思路来写,同样使用 img.width实现不了效果,所以后面改用img.style.width:我这等小白在这问题上纠结了好久,简直

Lightbox改造——支持滚轮缩放

在做文章类型的web页时,经常会遇到要点开看大图的需求,LightBox2则是在众多产品中比较优秀的一款Jquery插件.配置就不细说了,今天我主要要分享的是:如何在点开大图后,可以通过鼠标滚轮来缩放图片,下面是一个简单的指引: 1.修改Lightbox源码使支持滚轮缩放 2.修改Lightbox源码使图片的源可支持base64格式 3.如何将Lightbox应用到已有的文章 1.修改Lightbox源码使支持滚轮缩放 支持鼠标滚轮主要就是把弹出后的框整个绑定上mousewheel事件,打开li

在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片

我们就把这个问题叫做图片查看器吧,它的主要功能有: 1.双击缩放图片. 2. 双指缩放图片. 3.单指拖拽图片. 为此这个图片查看器需要考虑以下的技术点: 一.双击缩放图片: 1.如果图片高度比屏幕的高度小得多,那么就将图片放大到高度与屏幕高度相等,否则就放大一个特定的倍数. 2.如何判断是否到达这个倍数来停止缩放. 3.判断完且停止放大后,图片可能已经超出了这个倍数需要的大小,如何回归到我们的目标大小. 4.判断完且停止缩小后,图片宽度可能已经小于屏幕宽度,在两边留下了空白,如何重置为原来的大

iOS 使用AFN 进行单图和多图上传 摄像头/相册获取图片,压缩图片

图片上传时必要将图片进行压缩,不然会上传失败 首先是同系统相册选择图片和视频.iOS系统自带有UIImagePickerController,可以选择或拍摄图片视频,但是最大的问题是只支持单选,由于项目要求需要支持多选,只能自己自定义.获取系统图库的框架有两个,一个是ALAssetsLibrary,兼容iOS低版本,但是在iOS9中是不建议使用的:另一个是PHAsset,但最低要求iOS8以上.兼容到iOS7,可以选择了ALAssetsLibrary 现在我们先说选择一张图的情况 一.单图多图上

鼠标滚轮实现图片的缩放-------Day79

今天是7月的最后一天了,不得不说,我定下的七月份剩余几天的计划是完不成了,一则工作确实紧了些,再则没能处理好生活.工作和学习的节奏,这才是人生最大的课题吧,不过也还好,至少自己还在坚持着,其实真的越来越感觉到自己的不足,可昂扬的斗志却是越来越低沉的迹象,内心里总有个声音在蛊惑自己:别整那些刻意的东西,做给谁看啊,而且刻意的记录的时间完全可以拿来学更多的东西,可最终我还在这个蛊惑前坚持着:确实可以腾出更多的时间来,也没人会在意在做什么,可是,同样,我不需要走那么快,而且只要知道自己在意就好了,我需

【Android】21.4 图片动画缩放示例

分类:C#.Android.VS2015: 创建日期:2016-03-21 一.简介 该例子演示如何动画缩放图片,实现类似"点击看大图"的效果. 二.示例 1.运行截图    2.设计步骤 (1)添加图片 在Resources/no-dpi文件夹下添加4张图片(2个缩略图,2个大图). (2)添加ch2104MyImageButton.cs using Android.Content; using Android.Widget; using System.Drawing; using

图片的缩放

通过手势进行图片的缩放,在onTouch事件中,MotionEvent.ACTION_POINTER_DOWN触发时则代表是多点触控,可以通过两点缩放的距离来缩放图片. 当图片加载完成时设置图片居中,默认大小为屏幕的80%,主要代码如下: private void setTreeObserver() {     viewTreeObserver = image.getViewTreeObserver();     viewTreeObserver.addOnGlobalLayoutListene

Android拖动和缩放图片

Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中的触摸机制了,在屏幕中有手指按下.手指抬起.手指移动还有多个手指触摸的动作. 我们要实现对图片的拖拽和缩放就是要基于这些动作来进行逻辑处理. 图片的拖拽主要是计算手指開始的位置与当前手指的位置关系,来进行平移的,详细能够看代码. 图片的缩放就涉及到计算两点之间的距离来得到缩放比,调用矩阵方法来达到缩

(二)弥补图片自由缩放出现的间隙

在上一篇文章中,初步实现了自定义ImageView的多点触控.但是从最终效果来看,却发现自由缩放时,图片与屏幕出现了空白间隙,这当然是让人十分厌恶的.在这篇文章中,就来解决这个问题.如果你还没读过上一篇文章,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4939629.html 先贴出上一篇文章所实现的最终效果图吧,如下: 从上图中,可以看到,图片缩放后,与屏幕之间形成了很大的空白间隙.现在来解决这个问题,主要是两个方面: (1)图片自由缩放