`
chenxueyong
  • 浏览: 342262 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

写了个图片预览

阅读更多

写了个图片预览

1.解决了在ie6下浮层不能盖住select的问题
2.对图进行等比缩放
添加了图片加载的loading过程,添加了缓存,图片只加载一次,下次再打开时,调用缓存的内容,
修改图片的调用方式,可以只给链接,自动加载,并且自适应图片大小
[/i]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>
 <BODY>
 填入图片链接,自动加载并自适应图片大小,默认是最大400*400,数量可以多个
 <input value="http://i3.6.cn/cvbnm/65/47/b6/e053ffbec660ce2b5d9aeed4673fdf8b.jpg"/>
 <input value="http://i3.6.cn/cvbnm/8d/3b/ca/09fe657d72664b2bbf70a2ae60dc4916.jpg"/>
 <input value="http://i3.6.cn/cvbnm/6f/66/b5/252c5aaf43b05c7dbf6829ac7374f689.jpg"/>
 <button onclick="preview()" >preview</button>
 </BODY>
</HTML>
<script>
 /*浏览图片类 */
 var imagePre = function(){
  var d = document,ua = navigator.userAgent.toLowerCase(),ie = !(ua.indexOf("opera") > -1),
   $ = function(id){return d.getElementById(id)},
   ie6=  !(ua.indexOf("opera") > -1) && ua.indexOf("msie") > -1,
   getWH = function(){
    var h = Math.max(d.documentElement.clientHeight,d.body.clientHeight),
     w = Math.max(d.documentElement.clientWidth,d.body.clientWidth);
    return {h:Math.max(h,d.body.scrollHeight),w:Math.max(w,d.body.scrollWidth)}
   },
   getTL = function(e){
    var t=0,l=0;
    do{
     t += e.offsetTop||0;
     l += e.offsetLeft||0;
    }while(e = e.offsetParent);
    return {t:t,l:l}
   },
   extend = function(t,s){
    for(var p in s){
     t[p] = s[p]
    }
   },
   rycDiv,selects,
   imgCache = {},
   options={
    current:0,
    size:400
   },
   Expo = {
    easeOut : function(t, b, c, d) {
      return Math.round((t==d)? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b);
    }
   },
   loadImg = function(sDiv){//加载图片  
    imgCache[options.current] = this;
    var pre = options.size/Math.max(this.height,this.width);
    sDiv.style.cssText = 'top:50%;left:50%;position:absolute;z-index:200;padding:0;border:solid 1px #afafaf; background:#ffffff;width:50px;height:50px;margin:'+(-25+Math.max(d.documentElement.scrollTop,d.body.scrollTop))+'px '+(-25+Math.max(d.documentElement.scrollLeft,d.body.scrollLeft))+'px;'
    var h = (this.height*pre+50)-50,w=(this.width*pre+10)-50,t=0,T = this,sT=Math.max(d.documentElement.scrollTop,d.body.scrollTop),
     sL = Math.max(d.documentElement.scrollLeft,d.body.scrollLeft),sDivStyle = sDiv.style,duration=ie?30:10;
    (function(){
     if(t>duration){
      sDiv.innerHTML = '<img src="http://i3.6.cn/cvbnm/dc/4e/bd/e57740223e09f1bfd97085996ccc75b6.jpg" onclick="imagePre.clear()" style="cursor:pointer;position:absolute;top:5px;left:'+(T.width*pre-10)+'px" /> \
     <img src="'+T.src+'" style="width:'+T.width*pre+'px;height:'+T.height*pre+'px;padding:0;margin:5px;"/> \
     <table width="100%" border="0" height="30"cellpadding="0" cellspacing="0" style="margin:-3px 0 3px 0;"><tr>'+(options.imgs?'<td><img  src="http://i3.6.cn/cvbnm/8f/2a/bb/8eb610f58f107df2de97d1ebd68727fb.jpg" style="'+(options.current==0?'filter:alpha(opacity=30);opacity:0.3;':'')+'cursor:pointer;width:30px; height:30px; float:left; margin:3px 3px;" '+(options.current==0?'':'onclick="imagePre.next(-1)"')+' /></td>':'')+
     '<td style="line-height:210%; text-align:center;">'+T.src.match(/\w+(\.\w+)?(?=\?)/)[0]+'</td>\
     '+(options.imgs?'<td><img src="http://i3.6.cn/cvbnm/3b/39/ab/34e8b8f923372e158993aa15e8cdff90.jpg"'+(options.current==options.imgs.length-1?'':'onclick="imagePre.next(1)"')+' style="'+(options.current==options.imgs.length-1?'filter:alpha(opacity=30);opacity:0.3;':'')+'cursor:pointer;width:30px; height:30px; float:right; margin:3px 3px ;" /></td>':'')+'</tr></table>';
      sDiv = null;
      return;
     }else{
      var th = Expo.easeOut(t,50,h,duration),
       tw = Expo.easeOut(t++,50,w,duration);
      sDivStyle.height = th + 'px';
      sDivStyle.width = tw  + 'px';
      sDivStyle.marginTop = -th/2 + sT + 'px';
      sDivStyle.marginLeft = -tw/2 + sL + 'px';
      setTimeout(arguments.callee,10)
     }
    })()
   },
   showImg=function(){
    var img = imgCache[options.current],
     sDiv = d.createElement('div');//中间显示的浮层
    sDiv.id = 'laySdiv';
    d.body.appendChild(sDiv);
    if(!img){
     sDiv.innerHTML = '<img src="http://i3.6.cn/cvbnm/15/38/0e/fb95569e5c61c0c7161da033ad863c91.jpg" style="z-index:201;width:48px;height:48px;"/>'
     sDiv.style.cssText = 'position:absolute;z-index:200;width:48px;height:48px;top:50%;left:50%;margin:'+(-24+Math.max(d.documentElement.scrollTop,d.body.scrollTop))+'px '+(-24+Math.max(d.documentElement.scrollLeft,d.body.scrollLeft))+'px;';
     img = new Image();
     var flag = 0;
     img.src = (options.path?options.path:options.imgs[options.current]) +'?time='+(+new Date);
     img.onload = function(){
      flag = 1;
      sDiv.innerHTML = '';
      loadImg.call(this,sDiv);
     }
     setTimeout(function(){
      if(!flag){
       alert('图片加载失败!');
       imagePre.clear()
      }
     },3000)
    }else{
     loadImg.call(img,sDiv);
    }
    
   };
  return {
   show:function(o){
    if(!rycDiv){
     rycDiv = d.createElement('div');
     rycDiv.style.display='none';
     rycDiv.id = 'rycDiv';
     d.body.insertBefore(rycDiv,d.body.firstChild);
    }
    //追加灰色背景
    var div = d.createElement('div'),wh = getWH();
    if(ie6){
     d.body.insertAdjacentHTML('afterBegin','<iframe id="layiframe" style="filter:alpha(opacity=0);position:absolute;top:0;left:0;width:'+wh.w+'px;height:'+wh.h+'px;z-index:99" ></iframe>')
     selects = d.getElementsByTagName('select');
     for(var i=0,ci;ci=selects[i];i++){
      var tl = getTL(ci),w = ci.offsetWidth,h = ci.offsetHeight;
      ci.style.visibility = 'hidden'
      d.body.insertAdjacentHTML('afterBegin','<div id=layselect'+i+' style="padding:1px 1px 0 2px; position:absolute;top:'+tl.t+'px;left:'+tl.l+'px;width:'+(w-4)+'px;height:'+(h-2)+'px;border:1px solid #c0c0c0;z-index:99;background:url(/images/sel.jpg) no-repeat 2px right;">&nbsp;'+ci.options[ci.selectedIndex].text+'</div>');
     }
    }
    div.style.cssText = "z-index:100;border:0;position:absolute;top:0;left:0;filter:alpha(opacity=60);opacity:0.6;width:"+wh.w+"px;height:"+wh.h+"px;background:#c0c0c0";
    div.id = 'layDiv'
    d.body.insertBefore(div,d.body.firstChild);
    extend(options,o||{});
    showImg();
   
   },
   clear:function(fn){
    if(ie6){
     for(var i = 0,ci;ci=selects[i];i++){
      rycDiv.appendChild($('layselect'+i));
      ci.style.visibility = 'visible'
     }
     rycDiv.appendChild($('layiframe'));
    }
    rycDiv.appendChild($('layDiv'));
    rycDiv.appendChild($('laySdiv'));
    rycDiv.innerHTML = '';
    fn&&fn();
    options ={
     current:0,
     size:400
    }
    d.body.removeChild(rycDiv);
    rycDiv = null;
   },
   next:function(p){
    options.current += p;
    rycDiv.appendChild($('laySdiv'));
    rycDiv.innerHTML = '';
    showImg();
   }
  }
 }()
 
 /*调用*/
 for(var i=0,ci,urls=[],inputs = document.getElementsByTagName('input');ci=inputs[i];i++){
  urls[i] = ci.value;
 }
 function preview(){
  imagePre.show({imgs:urls})
 }
 
 
</script>
loading图差点意思只能上传jpg所以不动,可以自己改了
分享到:
评论

相关推荐

    vue3图片预览插件.zip

    vue3 发布之后,开始使用 vue3 + ts 写代码,需要使用图片预览插件,在 npm 找了一圈没有适合的。要么是 v2 的插件,要么是不支持 ts,要么是使用不方便,因此封装一个简单的图片预览插件。 内附使用说明 纯手打,...

    react-这是一个用于做图片预览或者图片查看得react插件

    这个名为"react-这是一个用于做图片预览或者图片查看得react插件"的项目,正是为了解决这一问题而设计的。它提供了一种方便、高效的方式来处理图片展示,使得用户可以在React应用中轻松实现图片的预览和浏览。 首先...

    Java图片预览源代码

    这个名为"Java图片预览源代码"的项目正是为了实现这样的需求,它利用Java、JSP(Java Server Pages)以及JavaScript技术来构建一个可以在网页上展示和预览图片的系统。下面将详细介绍这三个关键技术及其在图片预览中...

    Jsp图片预览程序(含Java源码)目前,很多网站都在为提升用户体验而努力,想尽多种办法让用户在网站上的操作更加舒适、人性化,就像这个图片预览小功能一样,不要说它很小,但是它发挥的作用很明显,在上传前预览一下图片,以免选择了错误的文件,上次写的无刷新文件上传系统最初的目的就是用来实现这个图片预览效果,程序中的JavaScript部分兼容ie6/7/8, firefox 3.5.5以及opera 10、safari 4.0.4、 chrome 3.0 等多种浏览器。

    就像这个图片预览小功能一样,不要说它很小,但是它发挥的作用很明显,在上传前预览一下图片,以免选择了错误的文件,上次写的无刷新文件上传系统最初的目的就是用来实现这个图片预览效果,程序中的JavaScript部分...

    jquery实现图片预览

    在网页开发中,图片预览是一项常见...通过这种方式,我们可以轻松地创建一个实时、便捷的图片预览功能,提升用户的交互体验。在实际项目中,还可以根据具体需求进行扩展和定制,比如添加多图预览、上传进度显示等功能。

    图片预览系统(a版)

    随着浏览器安全性的提高,要实现图片预览也越来越困难。 不过群众的智慧是无限的,网上也有很多变通或先进的方法来实现。...上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果。

    Javascript写的多图片上传带图片预览功能

    总结起来,实现JavaScript写的多图片上传带图片预览功能,主要涉及前端的File API和事件监听,以及后台的C#.NET HttpHandler处理。这样的组合提供了良好的用户体验,让用户能够在上传前预览图片,同时在后台进行安全...

    图片预览系统(asp版)

    上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果。 兼容:ie6/7/8, firefox 3.5.5 后台支持下还兼容:opera 10.10, safari 4.0.4, chrome 3.0 asp版本使用Persits.Jpeg组件缩放图片,测试请...

    上传图片预览(限制格式大小)

    本篇将详细介绍如何在`.NET MVC`框架下,结合`HTML`、`JavaScript`(简称Js)和`jQuery`(简称JQ)实现"上传图片预览"功能,并限制上传的图片格式和大小。 首先,我们需要在前端页面创建一个`HTML`表单,包含一个`...

    多图片上传带图片预览功能

    在IT领域,多图片上传和图片预览功能是网页应用中常见的需求,尤其在社交媒体、电商网站和内容管理系统中。这个ASP程序提供了这样的功能,允许用户在上传多张图片前进行预览,提高了用户体验和交互性。下面我们将...

    MFC图片预览与缩放

    本主题聚焦于"MFC图片预览与缩放",这是一个常见的需求,尤其是在图像处理或图形用户界面(GUI)设计中。MFC提供了一套类库,使得开发者能够方便地实现这些功能。 首先,图片预览功能是让用户在不打开原文件的情况...

    图片预览系统(asp版).rar

    上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果。 兼容:ie6/7/8, firefox 3.5.5 后台支持下还兼容:opera 10.10, safari 4.0.4, chrome 3.0 asp版本使用Persits.Jpeg组件缩放图片,...

    上传 图片预览上传 Image Preview

    图片上传预览是一种在图片上传之前对图片进行...上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果的。 兼容:ie6/7/8, firefox 3.5.5 后台支持下还兼容:opera 10.10, safari 4.0.4, chrome 3.0

    JavaScript 图片预览效果

    好东西部多说,很实用。随着浏览器安全性的提高,要实现图片预览也越来越困难。 不过群众的智慧是无限的,网上也有很多变通或先进的方法来...上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果

    C#实现DWG图片预览.txt

    根据提供的文件信息,本文将详细解析如何利用C#语言实现对DWG文件的图片预览功能。本技术文章主要涵盖以下关键知识点: ### 一、理解DWG文件格式 DWG(Drawing Web Format)是一种由Autodesk公司开发的用于CAD...

    图片预览系统(asp.net版).rar

    随着浏览器安全性的提高,要实现图片预览也...上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果。 兼容:ie6/7/8, firefox 3.5.5 后台支持下还兼容:opera 10.10, safari 4.0.4, chrome 3.0

    js基于magicthumb插件写的各种图片预览效果

    在JavaScript的世界里,图片预览是一项常见的功能,特别是在网页交互设计中。MagicThumb是一个轻量级的插件,专门用于实现这种效果。本教程将深入探讨如何利用MagicThumb插件来创建各种各样的图片预览效果,提升用户...

    图片上传预览功能实现-java

    首先,我们需要理解图片预览的核心在于读取图片文件并将其显示在界面上。在Java中,我们可以使用`java.awt.image`和`javax.imageio`这两个包中的类来处理图像。`BufferedImage`用于存储图像,`ImageIO`则提供读写...

    图片上传预览效果,很小的一个插件

    这个插件的标题"图片上传预览效果,很小的一个插件"表明它是一个轻量级的解决方案,专为实现快速、便捷的图片预览而设计。描述中提到"实现简单的图片上传预览,非常小的插件,自己写的,很好用",这暗示了该插件是由...

    JAVA 图片上传 预览

    图片预览" /&gt; ``` 此外,考虑到安全问题,应该对上传的文件进行验证,例如检查文件类型、文件大小,防止恶意文件上传。同时,为了用户体验,可以在上传过程中提供进度条显示,或者使用Ajax异步上传,避免页面刷新。...

Global site tag (gtag.js) - Google Analytics