function Range(wrapper, settings) {
//初始化div
this.slider = document.createElement("div");
this.ranger = document.createElement("div");
//传入初始值
if (settings == null) {
settings = {
min : 0,
max : 100,
id : "gt"
};
}
with (this) {
min = settings.min;
max = settings.max;
value = settings.min;
slider.setAttribute("id", settings.id + "slider");
slider.setAttribute("className", "slider");
slider.innerHTML = "d";
ranger.setAttribute("id", settings.id + "ranger");
ranger.setAttribute("className", "ranger");
}
this.onChange = function() {
};
//绑定监听器
var _self = this;
this.slider.addEventListener("mousedown", function() {
_self._onMouseDown();
}, true);
//显示
this._initialize(wrapper);
} Range.prototype._valueChanged = function(x) {
if (x) {
slider.style.left = x + "px";
} else {
with (this) {
slider.style.left = Math.round((value - min) / (max - min)
* (ranger.offsetWidth - slider.offsetWidth))
+ "px";
}
}
this.onChange();
};
Range.prototype._initialize = function(wrapper) {
this.ranger.appendChild(this.slider);
wrapper.appendChild(this.ranger);
this._valueChanged();
};
Range.prototype._onMouseMove = function(e) {//为什么context是body
if (e.clientX <= this.ranger.offsetLeft) {
this.value = this.min;
this._valueChanged();
} else if (e.clientX >= this.ranger.offsetLeft) {
this.value = this.max;
this._valueChanged();
} else {
this.value = this.min
+ Math
.round((e.clientX - this.slider.offsetLeft)
/ (this.ranger.offsetWidth - this.slider.offsetWidth)
* (this.max - this.min));
this._valueChanged(e.clientX);
}
};
Range.prototype._onMouseUp = function() {
document.body.removeEventListener("mousemove", this._onMouseMove, true);
document.body.removeEventListener("mouseup", this._onMouseUp, true);
};
Range.prototype._onMouseDown = function() {
console.log(this);
document.body.addEventListener("mousemove", this._onMouseMove, true);
document.body.addEventListener("mouseup", this._onMouseUp, true);
};为什么加重那行 _onMouseMove中的this会是document.body 但是前面的_initialize中的this是Range对象啊只有这么几分了 求解啊
//初始化div
this.slider = document.createElement("div");
this.ranger = document.createElement("div");
//传入初始值
if (settings == null) {
settings = {
min : 0,
max : 100,
id : "gt"
};
}
with (this) {
min = settings.min;
max = settings.max;
value = settings.min;
slider.setAttribute("id", settings.id + "slider");
slider.setAttribute("className", "slider");
slider.innerHTML = "d";
ranger.setAttribute("id", settings.id + "ranger");
ranger.setAttribute("className", "ranger");
}
this.onChange = function() {
};
//绑定监听器
var _self = this;
this.slider.addEventListener("mousedown", function() {
_self._onMouseDown();
}, true);
//显示
this._initialize(wrapper);
} Range.prototype._valueChanged = function(x) {
if (x) {
slider.style.left = x + "px";
} else {
with (this) {
slider.style.left = Math.round((value - min) / (max - min)
* (ranger.offsetWidth - slider.offsetWidth))
+ "px";
}
}
this.onChange();
};
Range.prototype._initialize = function(wrapper) {
this.ranger.appendChild(this.slider);
wrapper.appendChild(this.ranger);
this._valueChanged();
};
Range.prototype._onMouseMove = function(e) {//为什么context是body
if (e.clientX <= this.ranger.offsetLeft) {
this.value = this.min;
this._valueChanged();
} else if (e.clientX >= this.ranger.offsetLeft) {
this.value = this.max;
this._valueChanged();
} else {
this.value = this.min
+ Math
.round((e.clientX - this.slider.offsetLeft)
/ (this.ranger.offsetWidth - this.slider.offsetWidth)
* (this.max - this.min));
this._valueChanged(e.clientX);
}
};
Range.prototype._onMouseUp = function() {
document.body.removeEventListener("mousemove", this._onMouseMove, true);
document.body.removeEventListener("mouseup", this._onMouseUp, true);
};
Range.prototype._onMouseDown = function() {
console.log(this);
document.body.addEventListener("mousemove", this._onMouseMove, true);
document.body.addEventListener("mouseup", this._onMouseUp, true);
};为什么加重那行 _onMouseMove中的this会是document.body 但是前面的_initialize中的this是Range对象啊只有这么几分了 求解啊
解决方案 »
- jquery问题.求高手指教.急急急~!!!十万火急~!!!!
- js送分问题,求教,得解即结
- enter按钮事件如何把按钮转到easyui的combobox,datetimebox等事件上去啊?
- 求这段IE代码的等效Firefox代码
- ext 登录页面显示不出来
- javascript基础中的一个小问题,大家帮我看看这段有什么问题。总报错,怎么改
- 急问,javascript中的onclick函数在mozilla浏览器中不能执行。
- 求救:在web页面中如何实现表格中有斜线的效果?使用图片例外
- echarts的大小超过了给定dom的大小是为啥?
- 前端技术
- jquery autocomplete动态传参的问题
- 2010版最新"Dom对象模型手册"提供下载!web开发者必备.
var me = this;
document.body.removeEventListener("mousemove", me._onMouseMove, true);
document.body.removeEventListener("mouseup", me._onMouseUp, true);
};以此类推
var me = this;
document.body.removeEventListener("mousemove", function(){me._onMouseMove}, true);
document.body.removeEventListener("mouseup", function(){me._onMouseUp}, true);
};
上面写错了 这样
var o = {
name:'is o'
,test:function(){alert(this.name);}
}o.test();var test1 = o.test;
var name = 'other name'
test1();看看2个运行的区别
所以绑定上下文的方法在传递的时候 一定要把 上下文一起传送document.body.removeEventListener("mousemove", function(){me._onMouseMove();}, true);