鼠标右键弹窗(实现重命名等)的设计

1.首先禁用window原生的右键弹窗(禁用包括2个区域,1是鼠标右键的区域div 2是弹出窗口的div):

    //禁用区域右键
    $(‘body‘).on(‘contextmenu‘,‘.bottompage‘,function(){
        return false;
    });
    $(‘body‘).on(‘contextmenu‘,‘#notebookedit‘,function(){
        return false;
    });

2.下面就是右键点击事件的方法了。

需要注意的是(1,弹窗多次点击会有偏移,所有每次弹出需要位置置为0     2,如果页面存在滚动条的话,需要将滚动条计算进去  3,获取滚动条偏移量不一定使用body对象,使用滚动条所在的div作为对象)

    //点击需要重命名的div
    $(‘body‘).on(‘mousedown‘,‘.noteitemstyle‘,function(event){
        //右键事件event.button==2
        if(event.button==2)
        {
            var offset=$(this).offset();
            //放置点击别处时的弹窗不消失造成误差
            $(‘.noteeditlist‘).css(‘display‘,‘none‘);

            //将弹窗的div绝对定位置清零,否则多次点击会产生偏移量
            $(‘.noteeditlist‘).css(‘position‘,‘absolute‘);
            $(".noteeditlist").css("left","0px");
            $(".noteeditlist").css("top","0px");

            //获取当前页面所在div的滚动条的高度,本页面只有垂直滚动条
            var locationY = $(‘.wrap‘).scrollTop();

            offset.top=parseInt(offset.top)+parseInt(locationY);

            //展示弹窗div ,并根据点击源对其属性赋值
            $(‘.noteeditlist‘).offset(offset);
            $(‘.noteeditlist‘).css(‘display‘,‘block‘);
            var id=$(this).attr(‘noteid‘);
            $(‘.noteeditlist‘).attr(‘renameid‘,id);

        }
    });

3 弹窗弹出之后,我们一般会希望点击页面其它部分时   弹窗会自动隐藏  实现方法如下

    //点击页面其他部分弹窗隐藏
    $(document).bind(‘click‘,function(e){
        var e = e || window.event; //浏览器兼容性
        var elem = e.target || e.srcElement;
        while (elem) { //循环判断至跟节点,防止点击的是div子元素
            if ((elem.id && elem.id==‘notebookedit‘)||(elem.className && elem.className==‘notebooklistview‘)){
            return;
            }
            elem = elem.parentNode;
            }
            $(‘#notebookedit‘).css(‘display‘,‘none‘); //点击的不是div或其子元素
        }); 

4 关于本文标题所说的重命名的功能,实现思路是

1)右键弹窗 ,弹窗中有重命名子项的选项,

2)点击之后, 最初右键的div变为可编辑的状态,

3)点击是会将最初右键的主题id赋值给弹窗的一个属性

4)编辑之后点击页面任何其他地方即代表重命名完成,发送ajax请求进行重命名

代码如下:

    $(document).bind(‘click‘,function(e){
        var e = e || window.event; //浏览器兼容性
        var elem = e.target || e.srcElement;
        while (elem) { //循环判断至跟节点,防止点击的是div子元素
            if ((elem.className && elem.className==‘notebookrenameedit‘)||(elem.id && elem.id==‘notebookrename‘)){
            return;
            }
            elem = elem.parentNode;
        }
        var renameid=$(‘#notebookrename‘).attr(‘renameid‘);
        //判断是否进行了重命名的编辑操作:点击弹窗重命名时会对renameid赋值
        if(renameid!=‘-1‘)
        {
          var renameval=$("#"+renameid+" .notebookrenameedit :input[name=‘rename‘]").val();

          //点击的不是div或其子元素
          $.post(‘index.php?r=coursespace/coursespace/notelistreload‘, {
                renameid: renameid, renameval: renameval
            },
            function(data, status) {
                if (status = ‘success‘) {
                    $(‘.bottompage‘).html(data);
                    //赋值标记为未点击重命名的状态
                    $(‘#notebookrename‘).attr(‘renameid‘, ‘-1‘);
                    $(‘.notebookrenameedit‘).css(‘display‘, ‘none‘);
                    CKEDITOR.replace("cke3",{toolbar:[
                                                      //加粗 斜体,划线  穿过线  下标字  上标字
                                                      [‘Bold‘,‘Italic‘,‘Underline‘,‘Strike‘,‘Subscript‘,‘Superscript‘],
                                                      //数字列表   实体列表   减小缩进    增大缩进
                                                      [‘NumberedList‘,‘BulletedList‘,‘-‘,‘Outdent‘,‘Indent‘],
                                                      //左对齐   居中对齐   右对齐    两端对齐
                                                      [‘JustifyLeft‘,‘JustifyCenter‘,‘JustifyRight‘,‘JustifyBlock‘],
                                                      [‘Styles‘,‘Format‘,‘Font‘,‘FontSize‘],],width:450});
                } else {
                    alert("加载失败!")
                }
            });
        }
    }); 

5 重命名是采用替换的思路,将展示的div替换为可编辑的input 。示例如下:

      <div class=‘notebookname‘><?= $Rpnotebook->title ?></div>
      <div class=‘notebookrenameedit‘ style=‘display:none;‘>
      <input type=‘text‘ name=‘rename‘ value=<?= $Rpnotebook->title ?> style=‘width:120px;‘ class=‘notebookrenameeditid‘>      </div>

6 弹窗的div

<div id=‘notebookedit‘ class="notebookdelete" style="display:none; " editid="-1" >
 <div class=‘notebookedititem‘ id=‘notebookitemdelete‘>删除</div>
 <div class=‘notebookedititem‘ id=‘notebookrename‘ renameid=‘-1‘>重命名</div>
</div>

附上效果图:

OK ,that‘s all ! 本文实现思路过程  偏移量部分参考过一位别人的博客思路,附上地址:http://blog.csdn.net/xuexiaodong009/article/details/6553292

时间: 2024-11-10 11:18:51

鼠标右键弹窗(实现重命名等)的设计的相关文章

Qt之控件重命名

现在的软件很多都支持双击重命名的操作,就像在windows下对某个文件夹重命名一样(如下图) 不巧之前也遇到过类似的设计问题,不过是在界面上对某个控件.现在整理一下,控件就用QPushButton来代替. 对一个Button双击重命名,其实总结起来就是一下几点: 1.鼠标双击开始重命名,也就是一个QLineEdit完全覆盖之前的Button 2.鼠标点击其他区域,退出重命名状态,保留之前的名字 3.按下键盘的回车键,完成重命名操作,显示新的名字 下面开始一步一步来. 首先第一点.一个Button

QT5 QtreeWidget 实现点击item事件以及右键菜单删除item 和 重命名item

1.new 一个QTreeWidget 对象,并设置头标签,和根节点(个人程序需要) QTreeWidget* treeWidget = ui.treeWidget;//我已经在ui设计师中拖了一个QTreeWidget QString headers; headers = "Name" ; treeWidget->setHeaderLabel(headers); QStringList rootText; rootText << "wells";

Ubuntu上安装火狐浏览器无法固定到启动器上,火狐图标显示异常 文件夹右键重命名选项变灰时重命名方法

http://blog.csdn.net/pipisorry/article/details/39483361 Ubuntu自带火狐浏览器,可是使用起来不好,并且版本还可能过旧,因此将其卸载(不卸载的话总是指向旧版本的firefox),于是从火狐官网上下载firefox并解压到/opt文件夹下. 不过下载的火狐无法固定到启动器上(可能看到固定上了,但是无法运行),并且图标似乎分辨率比较低,看起来比较模糊.),删除了:/home/qiyo/.mozilla/目录,然后才能固定上. 找到/opt文件

WPF如何实现TreeView节点重命名

我们经常看到一些软件比如酷狗音乐,在对列表右键进行重命名的时候,当前列表会泛白并且进入可编辑状态,当我们更改完成后就会并进入非编辑状态,这些具体是怎么实现的呢?下面的方法也许会提供一些思路,下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和TextBox控件的Text属性上,并且让两者绑定相同的属性,同时使TextBox控件刚好完全覆盖TextBlock控件, 由于TextBlock控件和TextBox控件的区别,TextBlock控件无法实现编辑,所以我在Tex

鼠标右键

在Windows 系统中,只要对着桌面或是文件(夹)单击右键,就会弹出一个快捷菜单,里面有对该文件(夹)的一些常用操作命令,通过右键菜单,可以方便用户对文件的某些操作.不知道你是否对它感兴趣?是否想对它作一番改头换面,做出有自己特色的右键菜单?不用着急,看完本文的大揭密,你将成为这方面的高手! 修改右键菜单应该在注册表中,具体的说,是在HKEY_CLASSES_ROOT根键下(这里可是右键菜单中所有命令的根源哦!).展开该根键,其下的子键主要有两种:扩展名键(.+扩展名)和类定义键(如图1).一

WPF 之 TreeView节点重命名

下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和TextBox控件的Text属性上,并且让两者绑定相同的属性,同时使TextBox控件刚好完全覆盖TextBlock控件, 由于TextBlock控件和TextBox控件的区别,TextBlock控件无法实现编辑,所以我在TextBlock控件的上面覆盖了一个TextBox控件,初始状态下我们设置TextBox的Visibility属性为Collapsed,当我们点击重命名的时候,我们再设置TextBox的Visi

Minifilter过滤,功能实现对驱动目录的监控,包括创建,重命名,删除并实现hips

注意下:我的这套过滤只能用在nt6系统上 原因是使用一个nt6上才有的函数 见函数 PsGetProcessFullName 其实没必要自己来写获取全路径 因为minifilter已经给我们提供了获取全路径的函数 FltGetFileNameInformation 我就不改了,哈哈 说说遇到的问题吧 在监控创建的时候,我在卸载post中的,我拒绝后,在弹窗,2-3次吧,以前就是会请求2-3次,我的解决方法是记录上一次拒绝的文件全路径,然后下一次来的时候来比对 这里可以将处理过的文件加入链表或者h

使用automation.py自动化重命名pdf书签,使全大写字母变成首字母大写

今天下载了一个英文pdf书籍,但书签全是大写英文字母,看上去有点别扭,于是想办法用自动化重命名pdf书签, 使书签全部变成首字母大写. pdf原始书签如下图: 重命名后的pdf书签 自动化动态效果图,两三分钟完成重命名工作. 下面介绍下自动化过程. automation.py是我封装的python调用UIAutomation的module,参考 http://www.cnblogs.com/Yinkaisheng/p/3444132.html 运行automation.py -h查看帮助 先使用

处理文件夹shift+鼠标右键出现的是powershell而不是命令行的问题的解决方法

如题,有时候安装一些工具的时候会需要在工具解压目录下打开命令提示符窗口键入一些固定的指令来完成安装,然后win10系统在常规的shift+鼠标右键打开的都时候发现没有命令提示符窗口,反而出现了一个powershell,然后又不想win+R打开运行输入CMD 然后通过命令切换到目标文件夹.在这个情况下可以选择如下步骤: 0x00: win+R打开运行输入regedit回车打开注册表编辑器. 0x01: 注册表路径 计算机\HKEY_CLASSES_ROOT\Directory\Background