`
lynnlysh
  • 浏览: 178897 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

jquery写的缩放边栏

阅读更多
写在前面:
这个缩放栏长得很丑,支持你自己用CSS进行美化

调用方法:
<link rel="stylesheet" type="text/css" href="zoombar.css" rel="stylesheet">
<body>
<div style="margin:200px;width:200px;height:200px;" id="text"><h1>正在开发,尽请期待</h1></div>
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="zoombar.js"></script>
<script type="text/javascript">
$(function(){
	 $('body').Zoombar({container:$("#text"),
		    zoomInFunction:function(){
		        //点击放大的自定义事件
		    },
		    zoomOutFunction:function(){
		    	//点击缩小的自定义事件
		    },
		    zoomFunction:function(evt,scale){
		    	//在杆上拖拽的自定义事件 evt事件,scale代表放大或者缩小倍数的参数
		    }});
})
</script>

重点说:
zoomFunction中scale参数的处理方法如下所示:
if(scale/5-4>0){
    if(scale/5-4>1){
        zoomFunc(Math.pow(0.8,parseInt(scale/5-4)));//0.8一个单位的缩小量,parseInt(scale/5-4)缩小倍数
    }else{
        zoomFunc(1);   
    }
}else{ 
    if(4-scale/5>1){
        zoomFunc(Math.pow(1.2,parseInt(4-scale/5)));//1.2一个单位的放大量,parseInt(4-scale/5)放大倍数
    }else{
        zoomFunc(1);
    }
}

如何做到元素在杆上的拖拽?
在父元素(中间的杆)的mousemove事件中判断鼠标左键是否是按下状态,然后写按下状态的拖拽事件
$("#gun").mousemove(
function(evt){
                if(isPress){
                  $("#mblock").offset({top:evt.clientY}).addClass("zoombar-mousedown"); 
                  $("#gun").addClass("zoombar-mousedown");
                  zoomThePlace(evt)
                }
            });

捕获鼠标左键按下的代码,由于div堆叠的情况,和浏览器各种兼容的情况,最终以以下方式获取鼠标左键按下的判断:
 var isPress = false;//处理IE9和火狐对鼠标按下状态监听的矫情的兼容
            $("body,#mblock,#gun,.zoombar-infor,.zoombar").mouseup(function(evt){
                isPress = false;
            }).mousedown(function(evt){
                isPress = true;
            });

注意事项:
缩放边栏要适应浏览器窗口大小改变的情况
var me = this;
$container.resize(function(){
                me.location($container);
            });

缺点总结:
chrome下拖拽时鼠标不显示手型
通过鼠标按键的抬起事件对isPress的捕获判断不是很准确
鼠标在拖拽滑块时容易造成选中一大片变蓝色的情况,如下图中所示:

最后:
希望大伙儿 给我美化下,并且解决以上提到的bug们
源码:
zoombar.js

$.Zoombar = $.Zoombar||{};
    $.extend($.Zoombar,{
        init:function($container){
            var me = this;
            $container.resize(function(){
                me.location($container);
            });
            return $("<div class='zoombar' id='zoombar'/>").appendTo("body");
               
        },
        initFunction:function(options){
            this.zoomInFunction = options.zoomInFunction;
            this.zoomOutFunction = options.zoomOutFunction;
            this.zoomFunction = options.zoomFunction;
        },
        location:function($container){
            var xc = $("#mblock").position().top-$("#zoombar").position().top==0?43:$("#mblock").position().top-$("#zoombar").position().top;
            $("#zoombar").offset({top: $container.position().top+50,left: $container.position().left+10});
            $("#mblock").offset({top: $("#zoombar").position().top+xc,left: $("#zoombar").position().left});
            $(".zoombar-infor").offset({top: $container.position().top+45,left: $container.position().left+25});
            
        },
        addContent:function($container){
            var me = this;
            $("<div class='zoombar-inButton'>+</div>").appendTo("#zoombar").click(function(){
                if($("#mblock").offset().top>$("#gun").offset().top){
                    me.zoomInFunction();
                    $("#mblock").offset({top:$("#mblock").offset().top-5});
                }
            });
            $("<div class='zoombar-gun' id='gun'></div>").appendTo("#zoombar");
            $("<div class='zoombar-outButton'>-</div>").appendTo("#zoombar").click(function(){
                 if($("#mblock").offset().top<($("#gun").offset().top+$("#gun").height())){
                    me.zoomOutFunction();
                    $("#mblock").offset({top:$("#mblock").offset().top+5});
                 }
            });
            $("<div id='mblock' class='zoombar-mblock'></div>").appendTo("body");
            var isPress = false;//处理IE9和火狐对鼠标按下状态监听的矫情的兼容
            $("body,#mblock,#gun,.zoombar-infor,.zoombar").mouseup(function(evt){
                isPress = false;
            }).mousedown(function(evt){
                isPress = true;
            });
            $("#gun").mousedown(function(evt){
	            $("#mblock").offset({top:evt.clientY});
                $("#gun").addClass("zoombar-mousedown");
	            zoomThePlace(evt);
            }).mousemove(function(evt){
                if(isPress){
                  $("#mblock").offset({top:evt.clientY}).addClass("zoombar-mousedown"); 
                  $("#gun").addClass("zoombar-mousedown");
                  zoomThePlace(evt)
                }
            }).mouseup(function(evt){
                isPress = false;
            });
            $("<div class='zoombar-infor'>-200%<br><br>-100%<br><br>-1%</div>").appendTo("body");
            function zoomThePlace(evt){
                $("#cellEditToolbar").remove();
                if($("#mblock").offset().top<($("#gun").offset().top+$("#gun").height())&&$("#mblock").offset().top>$("#gun").offset().top){
                    var scale = $("#mblock").offset().top-$("#gun").offset().top;
                    me.zoomFunction(evt,scale);
                }
            }
        }
        
    });
    $.extend($.fn,{
       Zoombar : function(options){
            $.Zoombar.initFunction(options);
            this.$elt = $.Zoombar.init(options.container);
            $.Zoombar.addContent(options.container);
            $.Zoombar.location(options.container)
            return this;
       } 
    });

zoombar.css
.zoombar {
	width:9px;
	position:absolute!important;
}
.zoombar-inButton {
	background-color:rgb(223, 223, 223);
	cursor:pointer;
	text-align:center;
}
.zoombar-outButton {
	background-color:rgb(223, 223, 223);
	cursor:pointer;
	text-align:center;
}
.zoombar-gun {
	background-color:rgb(223, 223, 223);
	height:50px;
	width:5px;
	margin-left:2px;
	margin-right:2px;
	cursor:pointer;
}
.zoombar-mousedown {
	cursor:pointer;
}
.zoombar-mblock {
	position:absolute!important;
	width:10px;
	height:5px;
	background-color:gray;
	cursor:pointer;
}
.zoombar-infor {
	position:absolute!important;
	width:50px;
	padding-left:3px;
	font-size:10px;
	line-height: 20px;
}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@好久不见的分割线@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
得不到的永远在躁动,被偏爱的却有恃无恐
  • 大小: 2.6 KB
  • 大小: 2.9 KB
分享到:
评论

相关推荐

    43种精品Jquery侧边栏在线客服

    4. **jQuery动画**:为了吸引用户的注意力并提供良好的用户体验,侧边栏客服通常会带有各种动画效果,如滑动展开、缩放、旋转等。jQuery的`.animate()`方法可以实现这些动画。 5. **响应式设计**:考虑到不同设备的...

    CSS3左侧边栏3D酷炫导航展开效果jquery特效代码.zip

    该资源是一个基于CSS3和jQuery实现的左侧边栏3D酷炫导航展开效果的代码库,适用于企业网站或商城网站的界面设计。这个特效能够为用户带来动态且富有视觉冲击力的浏览体验,提升网站的专业性和吸引力。 首先,我们要...

    jQuery实现的倾斜打开侧边栏菜单特效源码.zip

    《jQuery实现的倾斜打开侧边栏菜单特效源码解析》 在网页设计中,侧边栏菜单是不可或缺的元素,它能有效地组织和展示网站的内容,提供用户友好的导航体验。而利用jQuery来实现侧边栏菜单的动态效果,更是能够提升...

    侧边栏+滑动列表

    滑动列表的实现可以借助JavaScript库和框架,如jQuery、React或Vue.js。这些工具提供了丰富的API和组件,可以轻松实现动态加载、无限滚动等功能,提升用户体验。同时,CSS3的transition和transform属性可以用来实现...

    jQuery树形结构菜单代码.zip

    这个实例对于构建层级分明的导航系统非常有用,比如网站的侧边栏菜单或者文件管理系统。 首先,`index.html`是这个项目的入口文件,它包含了HTML结构、样式链接和脚本引用。HTML结构通常会包含一个容器元素,用于...

    简洁时尚的jQuery和CSS3侧边栏菜单插件sidenav特效源码.zip

    "简洁时尚的jQuery和CSS3侧边栏菜单插件sidenav特效源码.zip"是一个专为网页开发人员提供的资源,它结合了jQuery的动态交互和CSS3的视觉效果,为网站的侧边栏菜单带来了一种新颖且吸引人的体验。本文将详细介绍这个...

    一组网页边栏过渡动画.rar

    例如,侧边栏可能会通过滑动、淡入淡出、缩放或旋转等效果展开或关闭,同时内容页面相应地更新。 此压缩包中的“一组网页边栏过渡动画”可能包含以下内容: 1. HTML模板:基础的HTML结构,包含了侧边栏和内容区域...

    jquery layout 经典布局(东南西北中)

    这个框架的核心在于一个能够自适应大小的中心面板,而面板的四周可以设置可折叠、可缩放的侧边栏,实现“东南西北中”的经典布局模式。本文将深入探讨jQuery Layout的使用方法和关键特性。 首先,我们需要理解...

    十套常用的精美jquery插件

    9. **jquery基于Bootstrap隐藏侧边栏菜单代码** 结合Bootstrap框架,实现了侧边栏菜单的隐藏和显示,适用于响应式布局,使导航在不同屏幕尺寸下都能优雅地工作。 10. **jQuery弹出窗口图片放大缩小旋转查看代码** ...

    jQuery倾斜打开侧边栏菜单特效代码

    "jQuery倾斜打开侧边栏菜单特效代码"是一种创新的交互设计,它通过结合jQuery库和HTML5技术,实现了一种独特的视觉效果:当用户点击左侧按钮时,侧边栏菜单会以倾斜的方式展开。这种特效不仅增加了用户体验的趣味性...

    鼠标双击或触摸双击事件检测jQuery插件

    - 打开/关闭侧边栏菜单。 - 展开/收起详细信息。 - 切换图片或内容。 - 在地图应用中缩放。 **六、总结** jQuery-doubleTap插件提供了一种高效、易于集成的方法,使得开发者可以轻松地在网页中添加鼠标双击和触摸...

    9种html5+css3隐藏侧边栏导航菜单动画效果

    这些效果通常结合JavaScript或jQuery来实现交互性,比如点击按钮展开或关闭侧边栏,或者检测滚动位置来固定或隐藏侧边栏。但在这个主题中,我们主要关注的是纯CSS3实现的动画效果。 在压缩包中的文件中,你可能会...

    jQuery仿京东商城首页模板

    7. **页面布局**:仿京东商城的模板通常包含头部(品牌标识、导航栏)、中部(商品展示区)、侧边栏(分类导航)和底部(版权信息、链接)等部分,结构清晰,易于导航。 8. **图片处理**:商品展示通常涉及图片懒...

    jquery-easyui-1.5版本

    1. **窗口(Window)**:用于创建弹出式的操作窗口,可以设置大小、位置、标题等属性,支持拖动和缩放。 2. **表单(Form)**:提供数据输入和验证功能,可以与后台进行数据交互。 3. **表格(Grid)**:展示大量...

    html5手机端弹出侧边栏滑动菜单代码.zip

    这个代码资源是基于jQuery和HTML5编写的,旨在帮助开发者创建一个动态的、响应式的侧边栏菜单,适用于手机和其他触摸设备。 首先,HTML5在其中起到了关键的角色,提供了新的语义化标签如, , 等,使得网页结构更加...

    jQuery EasyUI 1.5 版 API 中文版.zip

    5. 菜单(Menu):创建下拉菜单或侧边栏菜单,方便用户导航。 6. 按钮(Button):提供各种类型的按钮,如普通按钮、链接按钮、复选按钮等。 7. 提示(Tip):显示提示信息,可以是简单的文字或包含HTML内容的浮层。...

    75款常用的jquery特效前端网页代码

    1. **导航菜单**:如汉堡菜单、侧边栏滑动菜单、下拉菜单等,用于改善网站的导航结构。 2. **滑动和滚动效果**:例如滑块、滚动动画、平滑滚动等,增强页面的动态感。 3. **图像和媒体**:如轮播图、图片预加载、...

    CSS3侧边栏卡片式菜单导航.zip

    7. **JavaScript增强**:虽然描述中提到的是CSS3实现的效果,但有时候为了增加交互性,我们还可以借助JavaScript或jQuery来添加更多的动态功能,例如,点击菜单项后保持卡片的展开状态,或者添加下拉子菜单等。...

    jQuery实现车门滑动效果

    此外,`JQuerySiderManger`可能是一个预封装的jQuery插件,专门用于处理侧边栏的滑动效果。使用这样的插件可以简化开发流程,因为它已经包含了所有必要的动画逻辑和事件处理。如果你的项目中包含了这个文件,建议...

Global site tag (gtag.js) - Google Analytics