jquery实现一些小动画二

jquery实现拖拽功能

 <!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="./reset.css">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<style>
html,body{
width:100%;
height:100%;
}
.dialogmark{
position:fixed;
top:0;
left:0;
z-index:1000;
width:100%;
height:100%;
background: rgba(0,0,0,0.3);
}
.dialogbox{
position:fixed;
width:300px;
height:400px;
z-index: 1001;
background:#fff;
overflow:hidden;
}
.dialogbox h3.title{
height:35px;
line-height:35px;
padding: 0 10px;
background: #DDD;
cursor: move;
position: relative;
user-select: none;
}
.dialogbox h3 i {
position: absolute;
top:50%;
right: 10px;
margin-top: -10px;
width: 20px;
height: 20px;
font-size: 16px;
line-height: 20px;
text-align: center;
font-style: normal;
cursor: pointer;
}
</style>
</head>
<body>
<div class="dialogmark"></div>
<div class="dialogbox">
<h3 class="title">
标题
<i>X</i>
</h3>
<div class="content">
</div>
</div>
<script>
$(function(){ /*
拖拽的js实现
*/
var $dialogmark = $(".dialogmark"),
$dialogbox = $(".dialogbox"),
$h1 = $dialogbox.children('.title'),
$i = $h1.children('i'),
HW = $("body").innerWidth(),
HH = $("body").innerHeight(),
boxW = $dialogbox.outerWidth(),
boxH = $dialogbox.outerHeight(); $i.click(function(){
$dialogbox.hide(300)
}) //计算盒子位置
var calPosition = function(){
//获取当前窗口的大小
$dialogbox.css({
top:(HH - boxH)/2,
left:(HW - boxW)/2
})
}
calPosition()
var dragstart = function(event){
var mX = event.clientX, //获取原始鼠标位置X位置
mY = event.clientY, //获取原始鼠标位置Y位置
boxSX = $dialogbox.position().left,
boxSY =$dialogbox.position().top;
//这里可以利用传递参数,也可以给元素赋值自定义属性保存变量值
$(document).on("mousemove",{mX,mY,boxSX,boxSY},dragmove)
}
var dragmove = function(event){
var {mX,mY,boxSX,boxSY}= event.data,
mMX = event.clientX, //移动鼠标的当前X位置
mMY = event.clientY, //移动鼠标的当前Y位置
mcX = mMX - mX, //鼠标改变X位置
mcY = mMY - mY, //鼠标改变Y位置
boxcX = boxSX + mcX, //盒子需要改变的X位置
boxcY = boxSY + mcY, //盒子需要改变的Y位置
minL = 0, //盒子最小移动X距离
minT = 0, //盒子最小移动Y距离
maxL = HW - boxW,//盒子最大移动X距离
maxT = HH - boxH;//盒子最大移动Y距离 boxcX = boxcX < minL?minL:(boxcX>maxL?maxL:boxcX) //X边界判断
boxcY = boxcY < minT?minT:(boxcY>maxT?maxT:boxcY) //Y边界判断
$dialogbox.css({
left:boxcX,
top:boxcY
})
}
var dragend = function(){
//快速拖拽存在鼠标丢失焦点问题
$(document).off("mousemove",dragmove)
}
$h1.mousedown(dragstart)
$(document).mouseup(dragend)
})

效果图:

  

注意:

  拖拽中存在的问题:    

    在拖拽中存在一个问题,就是如果鼠标拖拽过快,盒子是需要计算罪行位置的,但是
    计算速度跟不上鼠标的移动速度,导致鼠标离开了盒子,那么此时鼠标的任何事件都与盒子
    无关了,即鼠标抬起不会触发接触绑定事件,鼠标移动也不会触发定义在盒子的鼠标移动事件

  解决思路:   

    1、使用setCapture与releaseCapture方法。注意google浏览器不支持这两个方法

     将鼠标与当前元素绑在一起,无论你移动多快,我都绑定在一起
       this.setCapture()
     将鼠标与当前元素解绑。与setCapture相反
       this.releaseCapture()
     2、鼠标移动在快也脱离不了document即当前文档,因此,
       我们可以给document绑定mousemove方法,那么鼠标在文档中移动都会触发mosemove绑定的事件
        注意:重新绑定document时,存在this指向(如果原本用了this)问题(解决思路:使用bind方法)

jquery实现一些小动画二的更多相关文章

  1. jquery实现一些小动画一

    jquery实现小动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. WPF之小动画二

    上一篇文章简单介绍了动画的定义方法和一些控制动画的方法,并没有涉及复杂属性的动画处理方式,本文将继续动画的其它方面的使用. 写在前面(对于一些动画操作时候的建议): 1.如果希望某个元素从显示到消失, ...

  3. 利用jQuery实现用户名片小动画

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.下面给大家介绍利用jQuery实现的小动画,非常的简便,如果有原生js操作的话,那么就不止这么多行了.至于CSS,个人觉得,这边CSS布局也蛮重 ...

  4. 用jquery实现抽奖小程序

    用jquery实现抽奖小程序 这些日子,到处都可以看到关于微信小程序的新闻或报到,在博客园中写关于微信小程序的也不少.但是今天我要说的不是微信小程序,而是用简单的jquery写的一个好玩的抽奖小程序. ...

  5. 关于JQuery(最后一点动画效果*)

    1,$(':radio').val(['1','2','3']);//特殊写法,把值为1 2 3的都选中. 2,math.abs(len)取绝对值 3,按钮高亮显示,一般是配置两个按钮,一个普通的,一 ...

  6. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  7. 如何制作网页小动画?——gif or png

    一.场景与动画 为了拉动网站氛围,或者吸引用户浏览焦点,需要使用一些小动画.这种动画不是(gif)单纯的重复,而是需要需要一些控制和交互,比如在动画完成后打开一个对话框.动画有几个基本要素(时间控制, ...

  8. jquery IE6 下animate 动画的opacity无效

    jquery IE6 下animate 动画的opacity无效,其实是有效的,因为IETester的一个小BUG 原生IE6 没问题...呵呵~~

  9. js、jQuery实现2048小游戏

    2048小游戏 一.游戏简介:  2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...

随机推荐

  1. JAVA SE学习路径

  2. html里js的execCommand的一点用法

    editorDoc.execCommand ('italic', false, null); 添加斜体 参考 http://help.dottoro.com/ljcvtcaw.php

  3. AWVS破解安装

    参考大佬@pirogue的安装步骤及awvs安装包,@pandahks的安装依赖,在本地虚拟机安装awvs,艰辛历程记录如下. 虚拟机操作系统:CentOS Linux release 7.7.190 ...

  4. 【洛谷P4589】[TJOI2018]智力竞赛(二分+最小链覆盖)

    洛谷 题意: 给出一个\(DAG\),现在要选出\(n+1\)条可相交的链来覆盖,最终使得未被覆盖的点集中,权值最小的点的权值最大. 思路: 显然最终的答案具有单调性,故直接二分答案来判断: 直接将小 ...

  5. 2. Linux文件与目录管理

    一.目录与路径 1. 相对路径与绝对路径 绝对路径:路径写法[一定由根目录 / 写起],如:/usr/share/doc 相对路径:路径写法[不由 / 写起], /usr/share/doc 要到 / ...

  6. (转)新建maven项目时报错Error:Maven Resources Compiler: Maven project configuration required for module 'XX'解决方法

    转载地址:https://blog.csdn.net/qq784515681/article/details/85070195 在新建maven项目时,Problems中报错: Error:Maven ...

  7. python 绘制词云图

    1. 先下载并安装nltk包,准备一张简单的图片存入代码所在文件目录,搜集英文停用词表 import nltk nltk.download() 2. 绘制词云图 import re import nu ...

  8. 剑指Offer-15.反转链表(C++/Java)

    题目: 输入一个链表,反转链表后,输出新链表的表头. 分析: 可以利用栈将链表元素依次压入栈中,再从栈中弹出元素重新建立链表,返回头节点. 也可以在原有的链表上来翻转,先保存当前节点的下一个节点,然后 ...

  9. Serializers 序列化组件——ModelSerializer详解

    前面学习Serializers用法时,发现所有的序列化都与我们的模型紧密相关. django_restframework也给我提供了跟模型紧密相关的序列化器——ModelSerializer. 它会根 ...

  10. 安装Ubuntu时出现Intel VT-X没有开启

    试了很多种方法,最后原来是只需要进入bosi系统,然后进入Intel Virtual Technology 使之成为Enabled即可,就这么简单粗暴.