修复png bug的脚本

ExpandedBlockStart.gif代码
// IE5.5+ PNG Alpha Fix v2.0 Alpha: Background Tiling Support
//
 (c) 2008 Angus Turnbull http://www.twinhelix.com

// This is licensed under the GNU LGPL, version 2.1 or later.
//
 For details, see: http://creativecommons.org/licenses/LGPL/2.1/

var IEPNGFix = window.IEPNGFix || {};

IEPNGFix.tileBG 
= function(elm, pngSrc, ready) {
    
// Params: A reference to a DOM element, the PNG src file pathname, and a
    // hidden "ready-to-run" passed when called back after image preloading.

    
var data = this.data[elm.uniqueID],
        elmW 
= Math.max(elm.clientWidth, elm.scrollWidth),
        elmH 
= Math.max(elm.clientHeight, elm.scrollHeight),
        bgX 
= elm.currentStyle.backgroundPositionX,
        bgY 
= elm.currentStyle.backgroundPositionY,
        bgR 
= elm.currentStyle.backgroundRepeat;

    
// Cache of DIVs created per element, and image preloader/data.
    if (!data.tiles) {
        data.tiles 
= {
            elm: elm,
            src: 
'',
            cache: [],
            img: 
new Image(),
            old: {}
        };
    }
    
var tiles = data.tiles,
        pngW 
= tiles.img.width,
        pngH 
= tiles.img.height;

    
if (pngSrc) {
        
if (!ready && pngSrc != tiles.src) {
            
// New image? Preload it with a callback to detect dimensions.
            tiles.img.onload = function() {
                
this.onload = null;
                IEPNGFix.tileBG(elm, pngSrc, 
1);
            };
            
return tiles.img.src = pngSrc;
        }
    } 
else {
        
// No image?
        if (tiles.src) ready = 1;
        pngW 
= pngH = 0;
    }
    tiles.src 
= pngSrc;

    
if (!ready && elmW == tiles.old.w && elmH == tiles.old.h &&
        bgX 
== tiles.old.x && bgY == tiles.old.y && bgR == tiles.old.r) {
        
return;
    }

    
// Convert English and percentage positions to pixels.
    var pos = {
            top: 
'0%',
            left: 
'0%',
            center: 
'50%',
            bottom: 
'100%',
            right: 
'100%'
        },
        x,
        y,
        pc;
    x 
= pos[bgX] || bgX;
    y 
= pos[bgY] || bgY;
    
if (pc = x.match(/(\d+)%/)) {
        x 
= Math.round((elmW - pngW) * (parseInt(pc[1]) / 100));
    }
    
if (pc = y.match(/(\d+)%/)) {
        y 
= Math.round((elmH - pngH) * (parseInt(pc[1]) / 100));
    }
    x 
= parseInt(x);
    y 
= parseInt(y);

    
// Handle backgroundRepeat.
    var repeatX = { 'repeat'1'repeat-x'1 }[bgR],
        repeatY 
= { 'repeat'1'repeat-y'1 }[bgR];
    
if (repeatX) {
        x 
%= pngW;
        
if (x > 0) x -= pngW;
    }
    
if (repeatY) {
        y 
%= pngH;
        
if (y > 0) y -= pngH;
    }

    
// Go!
    this.hook.enabled = 0;
    
if (!({ relative: 1, absolute: 1 }[elm.currentStyle.position])) {
        elm.style.position 
= 'relative';
    }
    
var count = 0,
        xPos,
        maxX 
= repeatX ? elmW : x + 0.1,
        yPos,
        maxY 
= repeatY ? elmH : y + 0.1,
        d,
        s,
        isNew;
    
if (pngW && pngH) {
        
for (xPos = x; xPos < maxX; xPos += pngW) {
            
for (yPos = y; yPos < maxY; yPos += pngH) {
                isNew 
= 0;
                
if (!tiles.cache[count]) {
                    tiles.cache[count] 
= document.createElement('div');
                    isNew 
= 1;
                }
                
var clipR = (xPos + pngW > elmW ? elmW - xPos : pngW),
                    clipB 
= (yPos + pngH > elmH ? elmH - yPos : pngH);
                d 
= tiles.cache[count];
                s 
= d.style;
                s.behavior 
= 'none';
                s.left 
= xPos + 'px';
                s.top 
= yPos + 'px';
                s.width 
= clipR + 'px';
                s.height 
= clipB + 'px';
                s.clip 
= 'rect(' +
                    (yPos 
< 0 ? 0 - yPos : 0+ 'px,' +
                    clipR 
+ 'px,' +
                    clipB 
+ 'px,' +
                    (xPos 
< 0 ? 0 - xPos : 0+ 'px)';
                s.display 
= 'block';
                
if (isNew) {
                    s.position 
= 'absolute';
                    s.zIndex 
= -999;
                    
if (elm.firstChild) {
                        elm.insertBefore(d, elm.firstChild);
                    } 
else {
                        elm.appendChild(d);
                    }
                }
                
this.fix(d, pngSrc, 0);
                count
++;
            }
        }
    }
    
while (count < tiles.cache.length) {
        
this.fix(tiles.cache[count], ''0);
        tiles.cache[count
++].style.display = 'none';
    }

    
this.hook.enabled = 1;

    
// Cache so updates are infrequent.
    tiles.old = {
        w: elmW,
        h: elmH,
        x: bgX,
        y: bgY,
        r: bgR
    };
};


IEPNGFix.update 
= function() {
    
// Update all PNG backgrounds.
    for (var i in IEPNGFix.data) {
        
var t = IEPNGFix.data[i].tiles;
        
if (t && t.elm && t.src) {
            IEPNGFix.tileBG(t.elm, t.src);
        }
    }
};
IEPNGFix.update.timer 
= 0;

if (window.attachEvent && !window.opera) {
    window.attachEvent(
'onresize'function() {
        clearTimeout(IEPNGFix.update.timer);
        IEPNGFix.update.timer 
= setTimeout(IEPNGFix.update, 100);
    });
}

 

转载于:https://www.cnblogs.com/samlin/archive/2010/01/11/1644273.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从草根到百万年薪程序员的十年风雨之路,吊打面试官系列!

开头 大家好&#xff0c;我是G哥&#xff0c;目前人在荆州办事&#xff0c;但是干货还是要安排上&#xff01; 国外有一个爆火的开发人员学习路线&#xff0c;目前已经在 Github收获了 131 k star&#xff0c;Star 数量在 Github 所有仓库中排名第 9 。这个仓库有多火就不用说…

Android View系列(二):事件分发机制源码解析

概述 在介绍点击事件规则之前&#xff0c;我们需要知道我们分析的是MotionEvent&#xff0c;即点击事件&#xff0c;所谓的事件分发就是对MotionEvent事件的分发过程&#xff0c;即当一个MotionEvent生成以后&#xff0c;系统需要把这个事件传递给具体的View&#xff0c;而这个…

从零开始系统化学Android,值得收藏!

前言 每年的3、4月份是各大企业为明年拓展业务大量吸纳人才的关键时期&#xff0c;招聘需求集中、空缺岗位多&#xff0c;用人单位也习惯在初秋进行大规模招聘。 金九银十&#xff0c;招聘旺季&#xff0c;也是一个求职旺季。 不打无准备的仗&#xff0c;在这种关键时期&…

[转]清华梦的粉碎——写给清华大学的退学申请

[转]清华梦的粉碎——写给清华大学的退学申请 读了全文&#xff0c;感同身受&#xff0c;全文转载。 By 王垠&#xff08;2005.09.22&#xff09; 作者王垠&#xff0c;非常有思想的一个人&#xff0c;川大计算机系97级本科&#xff0c;2001年毕业后直博保送清华大学计算机系&a…

网易严选Java开发三面面经:java技术编程培训班

前言 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。它的核心是一组过滤器链&#xff0c;不同的功能经由不同的过滤器。这篇文章就是想通过一个小案例将Spring Security整合到…

第九篇 并发(进程和线程)

Python里执行并发有进程和线程两个&#xff0c;分布使用 threading 和multiprocessing 两个库&#xff0c;一般用的是这两个库里的Thread和Process from threading import Thread # 线程 : 同时运行from multiprocessing import Process # 进程 进程和线程的使用场景&#x…

网易严选Java开发三面面经:java读文件内容

一、前言 Redis 提供了5种数据类型&#xff1a;String&#xff08;字符串&#xff09;、Hash&#xff08;哈希&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Zset&#xff08;有序集合&#xff09;&#xff0c;理解每种数据类型的特点对于…

网易严选Java开发三面面经:mysql索引面试题

写在前面 最近&#xff0c;很多小伙伴出去面试都被问到了Spring问题&#xff0c;关于Spring&#xff0c;细节点很多&#xff0c;面试官也非常喜欢问一些很细节的技术点。所以&#xff0c;在 Spring 专题中&#xff0c;我们尽量把Spring的每个技术细节说清楚&#xff0c;将透彻…

网易严选Java开发三面面经:南京黑马java培训怎么样

个人背景 如标题所示&#xff0c;我的个人背景非常简单&#xff0c;Java开发经验1年半&#xff0c;学历普通&#xff0c;2本本科毕业&#xff0c;毕业后出来就一直在Crud&#xff0c;在公司每天重复的工作对我的技术提升并没有什么帮助&#xff0c;但小镇出来的我也深知自我努…

网易架构师深入讲解Java开发!BAT等大厂必问技术面试题

前言 MyBatis是目前非常流行的ORM框架&#xff0c;它的功能很强大&#xff0c;然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路&#xff0c;并且讨论MyBatis的几个核心部件&#xff0c;然后结合一个select查询实例&#xff0c;深入代码&#xff0c;来探究MyBa…

IOS 消息转发

最近在看消息转发的资料&#xff0c;发现大部分都是理论知识&#xff0c;很少有完整的代码。现在以代码的形式形象的解释一下&#xff1a; 用Xcode创建一个工程 1.正常方法调用 创建一个类Person 代码如下 Person.h代码如下&#xff1a; #import <Foundation/Foundation.h&g…

网易资深Java架构师:java数组对象转为list集合

前言 现在刷抖音经常可以看到一些老外街坊&#xff0c;问他们最想把什么带回自己的国家&#xff0c;我听过很多的回答都是&#xff1a;淘宝&#xff0c;支付宝&#xff0c;美食&#xff0c;微信&#xff0c;外卖&#xff0c;高铁等等。 确实如此&#xff0c;随着国家的快速发…

夯实基础——P2084 进制转换

题目链接&#xff1a;https://www.luogu.org/problem/P2084 P2084 进制转换 题目背景 无 题目描述 今天小明学会了进制转换&#xff0c;比如&#xff08;10101&#xff09;2 &#xff0c;那么它的十进制表示的式子就是 : 1*2^40*2^31*2^20*2^11*2^0&#xff0c; 那么请你编程实…

网易资深Java架构师:java方法的定义和使用

前言 今年因为这个疫情&#xff0c;感觉这是从工作以来过的最久的一个年了&#xff0c;在家呆的时间不是一般的久&#xff0c;算一算有好几个月呢&#xff01;我大概是3月底快4月了才出门&#xff0c;投了超多的简历&#xff0c;天天面试面试面试面试面试面试面试…庆幸的是还…

PHP----学生管理系统

闲来无事花费两天时间写了份简易版的学生管理系统 源码地址:https://www.cnblogs.com/post/ReadAuth?blogId509327&PostId11333758&url%2Fbyczyz%2Fprotected%2Fp%2F11333758.html 转载于:https://www.cnblogs.com/byczyz/p/11333760.html

网易资深Java架构师:jdkjrejvm的区别和联系

前言 作为同时具备高性能、高可靠和高可扩展性的典型键值数据库&#xff0c;Redis不仅功能强大&#xff0c;而且稳定&#xff0c;理所当然地成为了大型互联网公司的首选。 众多大厂在招聘的时候&#xff0c;不仅会要求面试者能简单地使用Redis&#xff0c;还要能深入地理解底…

深度学习之开端备注

Adagrad //适合稀疏样本 RMSprop//借鉴Adagrad的思想&#xff0c;改进使得不会出现学习率越来越低的问题 由此可见Adadelta既不需要输入学习率等参数&#xff0c;而且表现得非常好&#xff01;&#xff01;但是我试了几次&#xff0c;这个优化器效果极差&#xff01;&#xff0…

网易资深Java架构师:疫情对java行业的影响分析

前言 在实际开发&#xff0c;Redis使用会频繁&#xff0c;那么在使用过程中我们该如何正确抉择数据类型呢&#xff1f;哪些场景下适用哪些数据类型。而且在面试中也很常会被面试官问到Redis数据结构方面的问题&#xff1a; Redis为什么快呢&#xff1f;为什么查询操作会变慢了…

ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值

原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_20130624.aspx ListView与.FindControl()方法的简单练习 #2 -- ItemUpdting事件中抓取「修改后」的值 本文跟上一篇文章有关连&#xff0c;请依照顺序来练习&#xff1…

美团java研发岗二面:java静态方法存储在哪个区

思维导图 前言 在很多时候&#xff0c;我们都可以在各种框架应用中看到ZooKeeper的身影&#xff0c;比如Kafka中间件&#xff0c;Dubbo框架&#xff0c;Hadoop等等。为什么到处都看到ZooKeeper&#xff1f; 一、 前些年&#xff0c;互联网行业里对架构师这个岗位的标准还不是…