JavaScript模拟文件拖选框样式v1.0的实例


Posted in Javascript onAugust 04, 2017

文件拖选v1.0

图片不清楚时请右键点击"在新链接中打开图片"

实现效果

JavaScript模拟文件拖选框样式v1.0的实例

页面布局

JavaScript模拟文件拖选框样式v1.0的实例

实现思路

拖选框

css样式中设置拖选框样式,注意设置position: absolute;漂浮状态.

监听p#container的鼠标按下事件并获取起始坐标,鼠标按下时通过append()方法添加p#selectBox.

鼠标按下事件后鼠标移动事件,比较鼠标的当前位置event.pageX,event.pageY来为p#selectBox添加坐标top/left

和尺寸width/height.

鼠标离开p#container或鼠标松开事件后,remove()方法移除p#selectBox

单选

监听li点击事件;

通过li>子元素.lebal>子元素指向lebal使用toggleClass()方法修改背景样式(显示/取消勾选);

通过this指向li元素本身使用toggleClass()方法修改背景颜色;

复选

监听鼠标按下事件,按下时取消现有的leballi的勾选样式;

监听li,当鼠标移动到上面时,添加样式;

鼠标松开时移除mouseover事件,使它不会继续选中;

遗留问题

拖拽速度快时会有部分文件选不中,初步判断是代码执行效率低的问题

JavaScript模拟文件拖选框样式v1.0的实例

以某个文件为起点选择时,有时无法选中该文件

如果在该文件上短暂停留后可以选中,初步判断时代码执行效率低的问题

JavaScript模拟文件拖选框样式v1.0的实例

想要点击复选按钮时可以完成复选,但单选绑定的click事件与复选的mousedown事件冲突

点击复选按钮时会触发复选的mousedown,移除选择样式,代码逻辑问题

已解决 : 复选框的mousedown事件阻止冒泡 $(".lebal").bind('mousedown', function(event) {event.stopPropagation();})

JavaScript模拟文件拖选框样式v1.0的实例

JavaScript模拟文件拖选框样式v1.0的实例

360云盘复选框拖拽选中后再移开鼠标,则会取消判定该文件的选中,不清楚应该往哪里加逻辑

JavaScript模拟文件拖选框样式v1.0的实例

源代码

<<index.html>>

<!DOCTYPE html>
<html>

<head>
  <title></title>
  <script type="text/javascript" src="js/jquery-3.2.1.js"></script>
  <script type="text/javascript" src="js/script.js"></script>
  <link rel="stylesheet" type="text/css" href="css/style.css" rel="external nofollow" >
</head>

<body>
  <div id="container">
    <ul>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
      <li>
        <div class="lebal"><label></label></div>
        <div class="file_name"><p>文件列表</p></div>
      </li>
    </ul>
  </div>
</body>

</html>

<<style.css>>

* {margin: 0;padding: 0;}
body {height: 700px;border: 1px black solid;}
#selectBox {border: 1px solid #89d9ff;background-color: rgba(137, 217, 255, 0.5);position: absolute;display: block;}
#container {margin-top: 100px;margin-left: 200px;width: 1200px;height: 600px;border: 1px red solid;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}
ul {margin: 20px;}
li {width: 100%;height: 40px;border-top: 1px #ddd solid;list-style: none;}
label {background: url('../images/lebal.png')no-repeat;background-position: 0 0;width: 15px;height: 15px;margin: 12.5px auto;display: block;}
.toggleLebalClass {background-position: 0 -52px;}
.toggleLiClass {background: #eeefff;}
.lebal {width: 40px;height: 40px;float: left;}
.file_name {width: 80%;height: 40px;float: left;}
p {line-height: 40px;}

<<script.js>>

"use strict";
var x, y;
$(function() {
  // 点选
  $("li").bind('click', function(event) {
    $(this).children(".lebal").children().toggleClass("toggleLebalClass");
    $(this).toggleClass("toggleLiClass");
  });
  // 复选
  $(".lebal").bind('mousedown', function(event) {
    event.stopPropagation();
  })
  // 拖选
  $("#container").mousedown(function(event) {
    x = event.pageX;
    y = event.pageY;
    $("#container").append("<div id='selectBox'></div>");
    $("li").children(".lebal").children().removeClass("toggleLebalClass");
    $("li").removeClass("toggleLiClass");
    $("li").bind("mouseover", function() {
      $(this).children(".lebal").children().addClass("toggleLebalClass");
      $(this).addClass("toggleLiClass");
    });
  }).mousemove(function(event) {
    $("#selectBox").css({
      left: event.pageX > x ? x : event.pageX,
      top: event.pageY > y ? y : event.pageY,
      width: Math.abs(event.pageX - x),
      height: Math.abs(event.pageY - y)
    });
  }).mouseup(function(event) {
    $("#selectBox").remove();
    $("li").unbind("mouseover");
  })
  $("#container").mouseleave(function() {
    $("#selectBox").remove();
  })
});

以上这篇JavaScript模拟文件拖选框样式v1.0的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
基于JQuery的6个Tab选项卡插件
Sep 03 Javascript
微信小程序 图片上传实例详解
May 05 Javascript
Node.js 回调函数实例详解
Jul 06 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
Apr 10 jQuery
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
AJAX实现省市县三级联动效果
Oct 16 Javascript
addeventlistener监听scroll跟touch(实例讲解)
Aug 04 #Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 #jQuery
Angular2环境搭建具体操作步骤(推荐)
Aug 04 #Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
Aug 03 #Javascript
JavaScript中正则表达式判断匹配规则及常用方法
Aug 03 #Javascript
vue 2.0封装model组件的方法
Aug 03 #Javascript
jQuery实现上传图片前预览效果功能
Aug 03 #jQuery
You might like
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python列表生成器的循环技巧分享
2015/03/06 Python
Python中的index()方法使用教程
2015/05/18 Python
python妹子图简单爬虫实例
2015/07/07 Python
深入理解Python中字典的键的使用
2015/08/19 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
python多进程实现文件下载传输功能
2018/07/28 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Python ini文件常用操作方法解析
2020/04/26 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
乌鸦喝水教学反思
2014/02/07 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
2014年秋季开学演讲稿
2014/05/24 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
保研推荐信范文
2015/03/25 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书