<!DOCTYPE html>
<html>
<head>
<title>jane</title>
<style>div.enclosure{border:solid black 10px;margin:10px;}</style>
</head>
<body>
<div><img id="content" src="test.jpg" /></div>
<script type="text/javascript">
var whenReady = (function(){
var funcs = [];
var ready = false;
function handler(e){
if(ready){
return;
}
if(e.type === "readystatechange" && document.readyState !== "complete"){
return;
}
for(var i = 0; i < funcs.length;i++){
funcs[i].call(document);
}
ready = true;
funcs = null;
}
if(document.addEventListener){
document.addEventListener("DOMContentLoaded",handler,false); //firefox 专有
document.addEventListener("readystatechange",handler,false);
window.addEventListener("load",handler,false);
}
else if(document.attachEvent){
document.attachEvent("onreadystatechange",handler);
window.attachEvent("onload",handler);
}
return function whenReady(f){
if(ready) f.call(document);
else funcs.push(f);
}
}());
// 查询窗口滚动条的位置
function getScrollOffset(w){
w = w || window;
// 除IE8及以前版本不能用
if(w.pageXoffset != null) return{x:w.pageXoffset,y:pageYoffset};
// 对标准模式下的IE(或者任何浏览器)
var d = w.document;
if(document.cmpatMode == "CSS1Compat"){
return{x:d.body.scrollLeft,y:d.body.scrllTop};
}
// 对怪异模式下的浏览器
else{
return{x:d.documentElement.scrollLeft,y:d.documentElement.scrollTop};
}
}
function enclose(content,framewidth,frameheight,contentX,contentY){
framewidth = Math.max(framewidth,50);
frameheight = Math.max(frameheight,50);
contentX = Math.min(contentX,0) || 0;
contentY = Math.min(contentY,0) || 0;
var frame = document.createElement("div");
frame.className = "enclosure";
frame.style.width = framewidth + "px";
frame.style.height = frameheight + "px";
frame.style.overflow = "hidden";
frame.style.boxSizing = "border-box";
frame.style.webkitBoxSizing = "border-box";
frame.style.MozBoxSizing = "border-box";
content.parentNode.insertBefore(frame,content);
frame.appendChild(content);
content.style.position = "relative";
content.style.left = contentX + "px";
content.style.top = contentY + "px";
var isMacWebkit = (navigator.userAgent.indexOf("Macintosh") !== -1 || navigator.userAgent.indexOf("WebKit") !== -1);
var isFirefox = (navigator.userAgent.indexOf("Gecko") !== -1);
frame.onwheel = wheelHandler; //未来浏览器
frame.onmousewheel = wheelHandler; // 大多数当前浏览器
if(isFirefox){
frame.addEventListener("DOMMouseScroll",wheelHandler,false);
}
function wheelHandler(event){
var e = event || window.event;
var deltaX = e.deltaX * -30 || //wheel事件
e.wheelDeltaX / 4 || // mousewheel
0; // 属性未定义
var deltaY = e.deltaY * -30 || // wheel事件
e.wheelDeltaY / 4 || // webkit中的mousewheel
(e.wheelDeltaY === undefined && // 若没有2D的,就用1D滚轮属性
e.wheelDelta / 4) ||
e.detail * -10 || // DOMMouseScroll
0;
if(isMacWebkit){ //Mac苹果系统反应灵敏。chrome也是比较灵敏
deltaX /= 30;
deltaY /= 30;
}
if(isFirefox && e.type !== "DOMMouseScroll"){
frame.removeEventListener("DOMMouseScroll",wheelHandler,false);
}
var contentbox = content.getBoundingClientRect();
var contentwidth = contentbox.right - contentbox.left;
var contentheight = contentbox.bottom - contentbox.top;
if(e.altKey){
if(deltaX){
framewidth -= deltaX;
framewidth = Math.min(framewidth,contentwidth);
framewidth = Math.max(framewidth,50);
frame.style.width = framewidth + "px";
}
if(deltaY){
frameheight -= deltaY;
frameheight = Math.min(frameheight,contentwidth);
frameheight = Math.max(frameheight,50);
frame.style.height = frameheight + "px";
}
}else{
if(deltaX){
var minoffset = Math.min(framewidth - contentwidth,0);
contentX = Math.max(contentX + deltaX,minoffset);
contentX = Math.min(contentX,0);
content.style.left = contentX + "px";
}
if(deltaY){
var minoffset = Math.min(frameheight - contentheight,0);
contentY = Math.max(contentY + deltaY,minoffset);
contentY = Math.min(contentY,0);
content.style.top = contentY + "px";
}
}
e.stopPropagation ? e.stopPropagation : e.cancelBubble = true;
e.preventDefault ? e.preventDefault : e.returnValue = false;
return false;
}
}
whenReady(function(){
enclose(document.getElementById("content"),500,500,-400,-200);
})
</script></body>
</html>
- js中鼠标滚轮事件详解
js中鼠标滚轮事件详解 (以下内容部分内容参考了http://adomas.org/javascript-mouse-wheel/ ) 之前js 仿Photoshop鼠标滚轮控制输入框取值中已使用 ...
- 两种js监听滚轮事件的方式
前段时间在写前端的时候,需要监听浏览器的滚轮事件 网上查了一下,找到两种监听滚轮事件的方法: 一.原生js通过window.onscroll监听 //window.onscroll = functio ...
- JS滚轮事件(mousewheel/DOMMouseScroll)了解
已经没有了小学生时代过目不忘的记忆力了,很多自己折腾的东西.接触的东西,短短1年之后就全然不记得了.比方说,完全记不得获取元素与页面距离的方法(getBoundingClientRect),或者是不记 ...
- js 滚轮事件 滚轮焦点图(轮播图)
利用滚轮,切换轮播图.附带mousewheel插件以及原生js写法: <!doctype html> <html> <head> <meta charse ...
- js整频滚动展示效果(函数节流鼠标滚轮事件)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 学习 JS滚轮事件(mousewheel/DOMMouseScroll)
学习 JS滚轮事件(mousewheel/DOMMouseScroll) 1-1 滚轮事件兼容性的差异 IE,chrome,safari 浏览器都使用 onmousewheel, 只有firefo ...
- JS鼠标滚轮事件解析
一.不同浏览器的鼠标滚轮事件 首先,不同的浏览器有不同的滚轮事件.主要是有两种,onmousewheel(IE/Opera/Chrome支持,firefox不支持)和DOMMouseScroll(只有 ...
- js 页面无滚动条添加滚轮事件
当页面无滚动条时,滑动滚轮时window.onscroll事件不会相应,此时应该去添加滚轮事件 var MouseWheelHandler=function(e){ e.preventDefault( ...
- js鼠标滚轮事件
不多说,直接上代码. //非ie document.body.onmousewheel = function(event) { event = event || window.event; conso ...
随机推荐
- 后缀数组 POJ 3974 Palindrome && URAL 1297 Palindrome
题目链接 题意:求给定的字符串的最长回文子串 分析:做法是构造一个新的字符串是原字符串+反转后的原字符串(这样方便求两边回文的后缀的最长前缀),即newS = S + '$' + revS,枚举回文串 ...
- 【转载】Android端手机测试体系
1.冒烟测试 跟web端 的测试流程一样,你拿到一个你们开发做出来的apk首先得去冒烟,也就是保证他的稳定性,指定时间内不会崩溃.这款原生sdk自带的monkey可以当做 我们的测试工具.就跟我之前博 ...
- Python基础11- 函数之自定义函数
自定义函数语法结构:def fun1([x],[y],....): 语句1 语句2 使用def语句来定义函数,在def后依次写出函数名.小括号.参数(可无).冒号,然后缩进写函数体 1.无参函数:de ...
- SOAPUI测试步骤之断言测试(Assertion TestStep)
什么是没有办法验证结果的测试?soapUI提供了两种方法来测试断言:断言TestSteps现在断言一步步测试(PRO版本).The Assertion TestStep,扩展了断言处理和管理的想法.此 ...
- BZOJ3468 : 滑雪
根据公式$x^k=\sum_{i=1}^k Stirling2(k,i)i!C(x,i)$, 设$f[i][j][k]$表示从$(i,j)$出发的所有路径的$C(路径长度,k)$的和, 根据$C(n, ...
- BZOJ 1029 & 丝帛贪心
题意: 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设 施受到了严重的损伤,如果不尽快修复的话,这些建 ...
- HDU 3078 (LCA+树链第K大)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3078 题目大意:定点修改.查询树中任意一条树链上,第K大值. 解题思路: 先用离线Tarjan把每个 ...
- 使用Percona Toolkit解决Mysql主从不同步问题【备忘】
由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:bi ...
- ACM: How many integers can you find-数论专题-容斥原理的简单应用+GCD
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- 简短总结一下C#里跨线程更新UI(转)
摘自: http://my.oschina.net/sdqxcxh/blog/53707 跨线程更新UI是写多线程程序尤其是通信类的程序经常遇到的问题,这里面主要的问题是冲突,比如数据线程想要更新UI ...