当前位置: 首页 > news >正文

代码演示插件wordpress/360搜索优化

代码演示插件wordpress,360搜索优化,品牌形象推广,手机钓鱼网站生成器之前被小伙伴问自己能不能写一个简单的原生的 我稍微犹豫了下 这次重新学习下拖拽的过程 分享下 参考 JavaScript高级程序设计 必要的准备 自定义事件(实现事件模型) 简单来说事件模型就是观察者模式的一种使用,主体负责发布和管理事件,观察者通过订阅特定的事件类型来观察…

之前被小伙伴问自己能不能写一个简单的原生的 我稍微犹豫了下  这次重新学习下拖拽的过程  分享下  参考 JavaScript高级程序设计

必要的准备 

自定义事件(实现事件模型) 

简单来说事件模型就是观察者模式的一种使用,主体负责发布和管理事件,观察者通过订阅特定的事件类型来观察主体发布的事件,举个例子你有一个按钮,它触发click事件就是在发布事件,事件处理程序就是观察者

  function EventTarget(){this.handlers = {};}EventTarget.prototype = {constructor:EventTarget,addHandler:function(type,handler){if(typeof this.handlers[type] == "undefined") {this.handlers[type] = [];}this.handlers[type].push(handler);  //通过数组的方式储存特定类型的事件处理程序(先后)},fire:function(event){  //触发特定的事件处理程序 就分别将event对象传递给特定类型下数组中每个事件处理函数if(!event.target) {event.target = this;}if(this.handlers[event.type] instanceof Array) {var handlers = this.handlers[event.type];for(var i = 0,len = handlers.length;i < len;i+=1) {handlers[i](event);}}},removeHandler:function(type,handler) {if(this.handlers[type] instanceof Array) {var handlers = this.handlers[type];for(var i = 0,len = handlers.length;i < len;i+=1) {if(handlers[i] == handler) {break;}}handlers.splice(i,1);}}}

我们可以这样使用上面的事件处理程序

  function test() {alert(1);}var target = new EventTarget();target.addHandler("message",test); //订阅了一个type是message的事件处理函数target.fire({type:"message"}); //触发该事件   会发现alert1

理解:自定义事件能使我们定义我们自己的事件type,能在我们需要进行交互的时刻触发特定的事件处理程序代码

实现跨浏览器的事件对象EventUtil   参考之前的blog  js事件小记

下面来完成拖动的代码

其实简单的理解拖动的过程就是当鼠标mousedown的时候(如果元素可以拖动),让它的绝对定位的left top是鼠标的event.clientX event.clientY 并且在mousemove的时候,时刻去跟随鼠标的位置更新自己的left top 最后在mouseup的时候不让改元素可以移动  我们通过在拖动中加入自定义事件就能够在特定的时刻相应我们的行为,例如网络传输数据,通过页面的元素与用户交互,输出拖动元素的信息等

    var DragDrop = function(){var dragdrop = new EventTarget(),dragging = null,diffX = 0,//diffX diffY 是为了处理每次拖动的时候鼠标位置的问题  diffY = 0;function handlerEvent(event) {var event = EventUtil.getEvent(event);var target = EventUtil.getTarget(event);switch(event.type) {case "mousedown":if(target.className.indexOf("draggable") > -1) {dragging = target;diffX = event.clientX - target.offsetLeft;diffY = event.clientY - target.offsetTop;  //获取鼠标位置和元素的左上角的位置差dragdrop.fire({type:"dragstart",target:dragging,x:event.clientX,y:event.clientY});}break;case "mousemove": if(dragging !== null) {dragging.style.left = (event.clientX - diffX) + "px";dragging.style.top = (event.clientY - diffY) + "px";dragdrop.fire({type:"drag",target:dragging,x:event.clientX,y:event.clientY});    }break;case "mouseup":dragdrop.fire({type:"dragend",target:dragging,x:event.clientX,y:event.clientY});dragging = null;break;  }};dragdrop.enable = function(){EventUtil.addHandler(document,"mousedown",handlerEvent);EventUtil.addHandler(document,"mousemove",handlerEvent);EventUtil.addHandler(document,"mouseup",handlerEvent);    };dragdrop.disable = function(){EventUtil.removeHandler(document,"mousedown",handlerEvent);EventUtil.removeHandler(document,"mousemove",handlerEvent);EventUtil.removeHandler(document,"mouseup",handlerEvent);};return dragdrop;}();DragDrop.enable();

上面的例子通过单例的模式,模块化的封装了拖动模块

其他相关点

z-index z-index 只在定位元素上有效果 即除了定位为static的元素

转载于:https://www.cnblogs.com/tiantianwaigong/p/5478423.html

http://www.jmfq.cn/news/5058073.html

相关文章:

  • 怎样做网站关键词优化/谷歌seo 优化
  • 网站优化要多少钱/百度关键词竞价
  • asp官网/企业seo培训
  • 做k线图网站/常熟网络推广
  • wordpress comment_count/网络优化培训
  • 做网站用的编程工具/房产网站建设
  • 网站建站素材/百度官网入口链接
  • 温州公司网站建设/网络广告营销有哪些
  • 徐州建网站/郑州网络推广哪个好
  • 河南网站营销seo电话/做抖音seo排名软件是否合法
  • 优秀的政府网站建设提供商/关键词推广工具
  • 如何做网站弹窗/考研比较厉害的培训机构
  • 青岛做网站建设/国际实时新闻
  • 关于工装设计的网站/珠海百度关键词优化
  • 长沙人才招聘信息网/搜索引擎关键词seo优化公司
  • 企业型网站建设步骤及注意事项/无锡百度竞价推广
  • 大酒店网站源代码/培训网站排名
  • 休闲食品网站建设/泉州seo培训
  • 企业网站建设现状/合肥网站优化推广方案
  • 淘客宝网站备案号如何弄/西安网站seo
  • 网站开发收/重庆网站搜索排名
  • 西宁做网站制作的公司/网络营销有什么方式
  • 润滑油手机网站模板/开发一款app软件需要多少钱
  • 可以拿自己电脑做网站/网上做广告怎么收费
  • 腾讯广告官网/群排名优化软件官网
  • 理财网站模板/网站建设优化公司
  • wordpress站怎么优化/百度广告推广
  • 东莞建网站公司/东莞百度快速排名优化
  • dedecms学校网站模板/昆明百度推广优化
  • 自己做视频网站可以吗/什么平台可以打广告做宣传