功能:双击页面图片弹出一个内含图片窗口,可进行全方位调整和拖拽
特点:
- 基于Ext-core,面向组件形式开发,不会与其它JS发生冲突
- 支持主流浏览器,已测试ie6、FF、chrome
- 全局单例模式,部分组件重用,事件注册优化,最大限度降低内存消耗
- 精心布局,考虑了页面存在滚动条的情况
- 使用特别简单
使用方法:
1.让页面加载完毕后执行初始化函数:
Ext.onReady(function(){
Ext.ux.ImageView.init();
});
2.为需要提供图片浏览功能的img添加class:resizable
<img src="wow.jpg" class="resizable"/>
预览:
附件例子可直接使用浏览器打开查看
//扩展下Ext.Element
(function(){
var D = Ext.lib.Dom;
Ext.apply(Ext.Element.prototype, {
//全屏幕居中,该元素必须为body的直接子元素,且为绝对定位;
center: function(){
var xy = [D.getViewportWidth(), D.getViewportHeight()];
var x = Ext.getBody().getScroll().left + (xy[0] - this.getWidth()) / 2;
var y = Ext.getBody().getScroll().top + (xy[1] - this.getHeight()) / 2;
this.setXY([x, y]);
}
});
}())
/**
* 功能:双击页面图片弹出一个内含图片窗口,可进行全方位调整和拖拽
*
* @author chemzqm@gmail.com
* @version 1.0
* @since 2010-4-30
*/
Ext.ns('Ext.ux');
Ext.ux.ImageView = function(){
return {
init: function(){
this.initMask();
Ext.getBody().on('dblclick', function(e, t, o){
var img = Ext.fly(t);
if (img.hasClass('resizable')) {
this.viewImg = Ext.getBody().createChild({
tag: 'img',
cls: 'dd-view'
});
this.viewImg.dom.src = img.getAttribute('src');
this.el = this.viewImg.wrap({
tag: 'div',
id: 'mywrap'
});
this.el.setWidth(img.getWidth());
this.el.setHeight(img.getHeight());
this.el.setStyle({
position: 'absolute',
zIndex: 3000,
cursor: 'move'
});
this.el.center();
this.createMakeUp();
this.initEvent();
}
}, this, {
delegate: 'img'
});
}
}
}();
Ext.apply(Ext.ux.ImageView, {
initMask: function(){
var d = Ext.lib.Dom, w = d.getViewWidth(true), h = d.getViewHeight(true);
this.mask = Ext.getBody().createChild({
cls: 'dd-mask'
});
this.mask.setWidth(w);
this.mask.setHeight(h);
this.frame = Ext.DomHelper.insertBefore(this.mask, '<iframe class="dd-frame" frameborder="0"></iframe>', true);//创建夹层
this.frame.setWidth(w);
this.frame.setHeight(h);
this.mask.hide();
this.frame.hide();
},
createMakeUp: function(){
this.mask.show();
this.frame.show();
var head = this.el.createChild({
cls: 'dd-header'
});
this.closeEl = head.createChild({
tag: 'button',
cls: 'dd-close',
html: '关闭'
});
this.creatProxy(this.el);
},
initEvent: function(){
this.closeEl.on('click', this.onDestroy, this);
Ext.getBody().on('mousedown', this.onMousedown, this, {
delegate: 'span'
});
Ext.getBody().on('mouseup', this.onMouseup, this);
Ext.getBody().on('click', this.onMouseup, this);
this.el.on('mousedown', this.stratMove, this);
this.el.on('mouseup', this.endMove, this);
this.el.on('click', this.endMove, this);
this.el.on('mousemove', this.onMove, this);
},
stratMove: function(e, t, o){
if (!Ext.fly(t).hasClass('dd-inner')) {
return;
}
this.begin = {
x: e.getPageX(),
y: e.getPageY(),
ex: this.el.getLeft(),
ey: this.el.getTop()
}
this.moving = true;
this.el.on('mousemove', this.onMove, this);
},
onMove: function(e, t, o){
if (!this.moving) {
return false;
}
e.preventDefault();
var dx = e.getPageX() - this.begin.x;
var dy = e.getPageY() - this.begin.y;
this.el.setX(this.begin.ex + dx);
this.el.setY(this.begin.ey + dy);
this.el.focus();
},
endMove: function(){
this.moving = false;
},
onMousedown: function(e, t, o){
e.preventDefault();
this.begin = {
x: e.getPageX(),
y: e.getPageY(),
ex: this.el.getLeft(),
ey: this.el.getTop(),
ew: this.el.getWidth(),
eh: this.el.getHeight(),
id: t.id
};
this.handler = Ext.get(t);
Ext.getBody().on('mousemove', this.onMouseMove, this);
},
onMouseMove: function(e, t, o){
e.preventDefault();
var dx = e.getPageX() - this.begin.x;
var dy = e.getPageY() - this.begin.y;
this.resize(this.begin.id, dx, dy);
this.adjustInner();
},
onMouseup: function(e, t, o){
Ext.getBody().un('mousemove', this.onMouseMove, this);
},
//让内部区调整宽高
adjustInner: function(){
this.proxy.setHeight(this.el.getHeight() + 10);
this.proxy.setWidth(this.el.getWidth() + 10);
},
resize: function(type, dx, dy){
var x = this.begin.ex;
var y = this.begin.ey;
var w = this.begin.ew;
var h = this.begin.eh;
var me = this.el;
var lx = dx > 0 ? true : false;
var ly = dy > 0 ? true : false;
switch (type) {
case 'tl':{
if (lx !== ly) {
return;
}
me.setStyle('left', x + dx + 'px');
me.setStyle('top', y + dy + 'px');
me.setWidth(w - dx);
me.setHeight(h - dy);
break;
}
case 'tr':{
if (lx === ly) {
return;
}
me.setStyle('top', y + dy + 'px');
me.setWidth(w + dx);
me.setHeight(h - dy);
break;
}
case 'bl':{
if (lx === ly) {
return;
}
me.setStyle('left', x + dx + 'px');
me.setWidth(w - dx);
me.setHeight(h + dy);
break;
}
case 'br':{
if (lx !== ly) {
return;
}
me.setWidth(w + dx);
me.setHeight(h + dy);
break;
}
case 't':{
me.setStyle('top', y + dy + 'px');
me.setHeight(h - dy);
break;
}
case 'b':{
me.setHeight(h + dy);
break;
}
case 'l':{
me.setStyle('left', x + dx + 'px');
me.setWidth(w - dx);
break;
}
case 'r':{
me.setWidth(w + dx);
break;
}
}
if (Ext.isIE6) {//垃圾ie6,子元素高度不会自适应
var eh = this.el.getHeight();
this.viewImg.setHeight(eh);
}
return;
},
creatProxy: function(el){
this.proxy = el.createChild({
cls: 'dd-proxy',
children: [{
cls: 'dd-inner'//ie需要一个透明元素遮挡,否则选定元素不一样
}, {
id: 'tl',
tag: 'span',
cls: 'dd-anchor dd-anchor-tl'
}, {
id: 'tr',
tag: 'span',
cls: 'dd-anchor dd-anchor-tr'
}, {
id: 'bl',
tag: 'span',
cls: 'dd-anchor dd-anchor-bl'
}, {
id: 'br',
tag: 'span',
cls: 'dd-anchor dd-anchor-br'
}, {
id: 'l',
tag: 'span',
cls: 'dd-handler dd-border-l'
}, {
id: 'r',
tag: 'span',
cls: 'dd-handler dd-border-r'
}, {
tag: 'span',
id: 't',
cls: 'dd-handler dd-border-t'
}, {
id: 'b',
tag: 'span',
cls: 'dd-handler dd-border-b'
}]
});
this.adjustInner();
},
onDestroy: function(){
this.closeEl.un('click', this.onDestroy, this);
Ext.getBody().un('mousedown', this.onMousedown, this, {
delegate: '.dd-handler'
});
Ext.getBody().un('mouseup', this.onMouseup, this);
Ext.getBody().un('click', this.onMouseup, this);
this.el.removeAllListeners();
this.mask.hide();
this.frame.hide();
this.el.remove();
}
});
- 大小: 483.2 KB
分享到:
相关推荐
总的来说,实现一个jQuery图片全景查看器,需要结合HTML、CSS、JavaScript和jQuery库的知识,通过鼠标拖动事件处理和图像处理技术,为用户提供一个可交互的全景视图。通过不断优化和调试,可以打造出一个流畅、直观...
"flex360°全视角立体旋转图片demo"就是一个利用Adobe Flex技术来创建的交互式3D展示应用,它带给用户一种全新的、全方位的图片浏览体验。这个应用通过Flash平台实现了图片的立体360度旋转,使用户可以像观察实物...
在本教程中,我们将深入探讨如何使用流行的JavaScript库——three.js来实现鼠标操作,包括拖拽和缩放,以便在3D环境中浏览全景图。这个功能对于创建虚拟展厅或在线房地产看房体验非常有用。 首先,我们需要理解...
"360度全景图片"是一种特殊的图像格式,它通过拼接多张照片来创建一个全方位、无死角的视觉体验。这种技术广泛应用于虚拟现实(VR)、房地产展示、旅游景点导览、室内设计等多个领域。在描述中提到的“一个可以旋转...
它允许用户通过鼠标左右拖动来浏览全景图像,从而实现对场景的全方位观察。这种技术在房地产、旅游、艺术展览等领域有广泛应用,能够生动地呈现空间环境。 首先,我们要了解jQuery的基本概念。jQuery是一个快速、...
- **360度无死角旋转**:UIMIX.fullview插件可以实现图片的无缝衔接,让物体看起来可以从任意角度旋转,提供全方位的视觉体验。 - **触控支持**:支持鼠标拖动和触摸滑动,用户可以通过点击和拖动来查看物体的不同...
jQuery实现360°全景拖动展示是一种在网页上创建沉浸式视觉体验的技术,它允许用户通过鼠标拖动或触摸滑动来查看全方位的图像。这种技术广泛应用于房地产、旅游、产品展示等领域,为用户提供更直观、更具吸引力的...
这个插件,名为elbeanio-jquery.tagsphere,以其易用性和灵活性,为开发者提供了一个高效且直观的解决方案,让用户能够全方位查看对象。 elbeanio-jquery.tagsphere的核心功能在于实现对象的360度无死角旋转,无论...
**jQuery UI全方位解析** jQuery UI 是一个开源的 JavaScript 库,它基于 jQuery 基础构建,提供了丰富的用户界面组件,如对话框、拖放功能、日历、滑块、进度条等,使得开发者能够轻松创建出交互性强、用户体验...
3dEye.js是一款强大的jQuery插件,专为实现这种效果而设计,它允许用户以全方位视角查看产品细节,从而增强在线购物体验。本文将深入探讨3dEye.js的核心功能、应用场景以及如何有效地整合到你的网站中。 首先,我们...
jQuery图片360度旋转插件spritespin是前端开发中的一种特效工具,它利用JavaScript库jQuery和CSS3技术,将一系列连续的静态图像拼接成一个大图,从而实现图片的无缝平滑旋转,为用户提供一种360度全方位视角的浏览...
RiPro主题就是这样一个专为资源分享下载站设计的高质量主题,它提供了丰富的自定义选项,使得用户可以根据自己的需求对网站进行全方位的美化。这个全站美化包特别之处在于它将美化功能集成到了后台,让管理变得更加...
【themebetter_ent_1.4主题】是一个专为企业官方网站、导购站、淘宝客、团队展示和商品展示设计的专业WordPress主题。这个主题以其超全面的SEO优化、模块化设计和强大的功能而备受赞誉,同时也因其简洁易用的特性而...
"600web_HTML手机电脑网站_网页源码移动端前端js效果_H5模板_自适应css源码ui组件.zip"这个资源包是一个全方位的前端开发工具箱,涵盖了HTML5、CSS3、JavaScript以及响应式设计等多个关键领域,对于学习和实践Web...
它能够为用户提供一个全方位、多视角的图像浏览体验,通常应用于虚拟旅游、产品展示、室内设计等领域。在“jquery全景图附带坐标”这个主题中,我们将深入探讨如何使用jQuery和相关插件创建带有坐标系统的全景图。 ...
全景图技术在现代数字媒体和虚拟现实(VR)领域中占据着重要地位,它能够提供360度全方位的视角体验,让用户仿佛置身于场景之中。"全景图入门Demo(一)"是一个针对全景图列表实现的源码示例,旨在帮助初学者理解和应用...
Java制作360度全景页面是一项技术性强且充满趣味性的任务,主要涉及到图像处理、Web开发和用户交互设计。...通过分析和集成这些文件,我们可以搭建一个完整的360度全景图浏览应用,为用户提供沉浸式的视觉体验。
《ArcGIS JavaScript API 3.33 深度解析》 ...无论是简单的地图展示,还是复杂的地理分析和数据可视化,这个API都能提供全方位的支持。通过熟练掌握并应用API,开发者可以创造出具有深远影响力的GIS解决方案。
这个插件允许用户从不同角度浏览图片,创造出类似虚拟现实的体验,尤其适用于展示室内设计、产品细节或者任何需要全方位视角的场景。由于它不依赖于Flash技术,因此在现代浏览器中运行良好,适应了HTML5的普及趋势。...