22.02.2010, 13:44
|
|
Аспирант
|
|
Регистрация: 14.08.2009
Сообщений: 51
|
|
Нужно задать максимальную ширину элемента
Пытаюсь ограничить максимальную ширину ссылки:
Код:
|
$(function() {
$(".compare a.card_name").css("width", function() {
a_width = $(this).width();
if (a_width > 145) {
a_width = 145;
}
/*alert(width);*/
return width + "px";
});
}); |
Проверял alert'ом - значения нужные выдаются
Но ширина не присваивается
В чем может быть причина?
|
|
22.02.2010, 13:54
|
|
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
Вы поменяли значение локальной переменной. Используйте .width("145px").
НУ, а по-хорошему, в css есть свойство max-width =)
|
|
22.02.2010, 14:06
|
|
Аспирант
|
|
Регистрация: 14.08.2009
Сообщений: 51
|
|
Спасибо за отклик!
да, но там придется expression для ие6 все равно делать
так что решил скриптом сделать, так как-то элегантнее что ли
а можно поподробнее, а то я что-то сообразить не могу..
вот код, в первый пост с ошибкой его вставил:
Код:
|
$(function() {
$("div.compare a.card_name").css("width", function() {
a_width = $(this).width();
if (a_width > 145) {
a_width = 145;
}
return a_width + "px";
});
}); |
|
|
22.02.2010, 15:24
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Ну, как минимум
var a_width = $(this).width();
|
|
22.02.2010, 15:43
|
|
Аспирант
|
|
Регистрация: 14.08.2009
Сообщений: 51
|
|
заработало
|
|
22.02.2010, 15:53
|
|
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
theo_,
Сообщение от theo_
|
скриптом сделать, так как-то элегантнее что ли
|
Вы в курсе, что Вы почти что мой классовый враг?
|
|
22.02.2010, 17:12
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,578
|
|
Сообщение от subzey
|
theo_,
Вы в курсе, что Вы почти что мой классовый враг?
|
То, что можно сверстать не стоит "подделывать" на js, да?
|
|
22.02.2010, 20:29
|
|
Пионэр
|
|
Регистрация: 16.11.2009
Сообщений: 1,322
|
|
micscr,
Ну, как-то так.
<mindstream>
Я верю, что есть люди, которые отключают яваскрипт.
Я верю, что может случиться так, что когда будет запускаться $(…).width(), цсс может еще не подгрузиться.
Я уверен, что правила для элементов должны задаваться каскадами, а не обработчиками.
Я допускаю, что на любом сайте может быть редизайн, и он не должен приводить к необходимости переписывать яваскрипты.
Я считаю, что использование яваскрипта для определения отображения, а не поведения нежелательно; и я не люблю jQuery, из-за того, что множество разработчиков на нем даже не задумываются об этом.
</mindstream>
|
|
29.03.2020, 21:01
|
Новичок на форуме
|
|
Регистрация: 29.03.2020
Сообщений: 2
|
|
Столкнулся с аналогичной проблемой, кто нибудь поможет?
Как ограничить область движения элемента js, чтобы он не выходил за границы блока(родителя). Вот тут код http://jsfiddle.net/g06xq14m/
(Управлять элементом через кнопки W-A-S-D)
|
|
29.03.2020, 22:31
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
ограничение перемещения размерами родительского блока
Nikolay000,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#person {
width: 80px;
height: 80px;
position: absolute;
background-image: url(http://faoor.com/account/img/back.gif);
background-repeat: no-repeat;
border: 1px dotted grey;
}
#point {
position: absolute;
left:20%;
top:30%;
width: 300px;
height: 300px;
background-color: lightgreen;
border: 1px solid green;
}
#point {
border: 1px solid grey;
background-color: #ccc;
}
html, body {
width: 100%;
background: #ffe;
height: 100%;
}
#content {
/* максимальная ширина страницы - 600px */
width: 600px;
max-width: 600px;
border: 1px solid;
position: relative;
height: 100%;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
$(document).ready(function () {
// Персонаж
var person = $("#person"),
// информация о скорости, позиции и нажатых клавишах
velocity_info = $("#velocity"),
position_info = $("#position"),
pressed_info = $("#pressed"),
// текущее положение объекта
position = [100, 100, 80, 80]
position[4] = position[0] + position[2]
position[5] = position[1] + position[3]
// координаты точки цели и её размеры по ширине и высоте
var point = [400, 400, 100, 100]
point[4] = point[0] + point[2]
point[5] = point[1] + point[3]
var point_reached = false;
// вектор скорости
var velocity = [0, 0, 0, 0, 0 ,0],
// зажатые клавиши
pressed = [],
// обработчик игровой логики (отдельный таймер, НЕ requestAnimationFrame!!!)
calc = setInterval(calc, 0);
$('body').append('<div id="point"></div>');
$('#point').css({'position' : 'absolute',
'left' : point[0] + 'px',
'top' : point[1] + 'px',
'width' : point[2] + 'px',
'height' : point[3] + 'px'});
var point_info = $("#point");
// случаем отдельно события нажатия и отжатия
$('body').on("keydown", function (event) {
if (pressed.indexOf(event.which) === -1) {
switch (event.which) {
case 65: // left
vec_add(velocity, [-2, 0]);
break;
case 87: // forward
vec_add(velocity, [0, -2]);
break;
case 68: // right
vec_add(velocity, [2, 0]);
break;
case 83: // back
vec_add(velocity, [0, 2]);
break;
}
pressed.push(event.which);
// после отжатия клавиши перемещения персонажа обновляем его изображение и проверяем достижение им цели
if (event.which === 65 || event.which === 87 || event.which === 68 || event.which === 83) {
person_gif ();
check_point_reach ();
}
}
});
$('body').on("keyup", function (event) {
var index;
if ((index = pressed.indexOf(event.which)) >= 0) {
pressed.splice(index, 1);
switch (event.which) {
case 65: // left
vec_sub(velocity, [-2, 0]);
break;
case 87: // forward
vec_sub(velocity, [0, -2]);
break;
case 68: // right
vec_sub(velocity, [2, 0]);
break;
case 83: // back
vec_sub(velocity, [0, 2]);
break;
}
// после отжатия клавиши перемещения персонажа обновляем его изображение и проверяем достижение им цели
if (event.which === 65 || event.which === 87 || event.which === 68 || event.which === 83) {
person_gif ();
check_point_reach ();
}
}
});
// запускам отрисовку сцены
if("clamp" in Math === false)
Math.clamp = function clamp(x, lower, upper) {
return Math.min(Math.max(lower, x), upper);
}
var maxWidth = $("#content").width() - $("#person").width();
var maxHeight = $("#content").height() - $("#person").height();
render();
function render() {
position[0] = Math.clamp(position[0], 0, maxWidth);
position[1] = Math.clamp(position[1], 0, maxHeight);
// изменяем позицию объекта
person.css({'left' : position[0] + "px"});
person.css({'top' : position[1] + "px"});
// отладочная информация
// output(velocity_info, velocity.join(", "));
// output(position_info, position.join(", "));
// output(pressed_info, pressed.join(", "));
// output(point_info, point.join(", "));
// запрашиваем следующих кадр
requestAnimationFrame(render);
}
function output(el, text) {
el.html(text);
}
// расчет игровой логики
function calc() {
// добавляем вектор скорости
vec_add(position, velocity);
}
function vec_add(a, b) {
a[0] += b[0];
a[1] += b[1];
a[4] += b[0];
a[5] += b[1];
}
function vec_sub(a, b) {
a[0] -= b[0];
a[1] -= b[1];
a[4] -= b[0];
a[5] -= b[1];
}
function person_gif () {
var fnames = [];
fnames[65] = 'left';
fnames[68] = 'right';
fnames[83] = 'back';
fnames[87] = 'forward';
// изображение по умолчанию (когда отжаты все клавиши, либо одновременно нажаты все четыре)
var fname = 'person';
// если надат только одна клавиша
if (pressed.length === 1) {
fname = fnames[pressed[0]];
}
// надаты две клавиши
else if (pressed.length === 2) {
// первой нажата кнопка W или S
if ((fnames[pressed[0]] === 'forward' || fnames[pressed[0]] === 'back') && (fnames[pressed[1]] === 'left' || fnames[pressed[1]] === 'right')) {
fname = fnames[pressed[0]] + '-' + fnames[pressed[1]];
}
// первой нажата кнопка A или D
else if ((fnames[pressed[0]] === 'left' || fnames[pressed[0]] === 'right') && (fnames[pressed[1]] === 'forward' || fnames[pressed[1]] === 'back')) {
fname = fnames[pressed[1]] + '-' + fnames[pressed[0]];
}
}
// если нажаты три клавиши
else if (pressed.length === 3) {
if (pressed.indexOf(87) >= 0) fname = fnames[87];
else if (pressed.indexOf(83) >= 0) fname = fnames[83];
}
person.css({'background-image' : 'url(http://faoor.com/account/img/back.gif)'});
}
function calc_m () {
$('#point').text('ОК!');
$('#point').css ({
'background-color' : 'lightgreen',
'border-color' : 'green',
})
}
function check_point_reach () {
if (point_reached === false) {
console.log ('check')
// если персонаж достиг объекта c любой стороны
if (
( (position[0] >= point[0] && position[0] <= point[4]) || (position[4] >= point[0] && position[4] <= point[4]) ) &&
( (position[1] >= point[1] && position[1] <= point[5]) || (position[5] >= point[1] && position[5] <= point[5]) )
) {
point_reached = true;
calc_m();
}
}
}
})
});
</script>
</head>
<body>
<div id="content">
<div id="person"></div>
<div id="velocity"></div>
<div id="position"></div>
<div id="pressed"></div>
</div>
</body>
</html>
|
|
|
|